Comments 4
grant select on dba_extents to user;
Имея такие права, любой сделает :)
Шучу конечно. Решение рабочее, сами примерно тоже самое делаем. В наличие прав утыкаемся очень часто. Кроме того, иногда приходится загружать из view, а там уже это совсем не работает, давай ты права или не давай…
А теперь пожалуйста, на бис все тоже самое — но на PostgreSQL? :)
Много магии оракл. Если итератором загружать кусочки заданного размера (универсальный способ: от .. до.. ) - насколько это будет медленнее предложенной схемы?
>Много магии оракл
Именно. Я не зря выше написал — попробуйте это повторить где-то еще, вы весь свой запрос полностью перепишете.
>насколько это будет медленнее предложенной схемы?
Ну так сложно сказать. Я вам вот что точно скажу — оракловый rowid это на самом деле ведь не число, это структурированный адрес блока, по сути. Это в общем даже видно из показанного запроса.
Поэтому оракл очень хорошо по нему отрабатывает, без лишних выборок с диска. По сути, это почти самое эффективное, что можно сделать — прямая выборка с диска по файлу и номеру блока. А ваш от и до — это в лучшем случае индекс. И он может быть довольно оптимален — но может быть и так себе. И скажем у меня в проекте стоит задача автоматически выбрать способ разбиения (ваши от и до), и вот эта показанная тут оракловая магия — она оказывается чуть ли не самой простой, если вам нужно всего лишь поделить таблицу на какие-то куски. Потому что если вам кто-то (DBA) не сказал заранее, возьми вон тот индекс, то выбрать индекс автоматически — это та еще задача (по сути — повторить часть логики ораклового оптимизатора).
Именно. Я не зря выше написал — попробуйте это повторить где-то еще, вы весь свой запрос полностью перепишете.
>насколько это будет медленнее предложенной схемы?
Ну так сложно сказать. Я вам вот что точно скажу — оракловый rowid это на самом деле ведь не число, это структурированный адрес блока, по сути. Это в общем даже видно из показанного запроса.
((rowid >= dbms_rowid.rowid_create(1, $data_object_id, $relative_fno, $start_block_id, 0)
AND rowid <= dbms_rowid.rowid_create(1, $data_object_id, $relative_fno, $end_block_id, 32767)))""")
Поэтому оракл очень хорошо по нему отрабатывает, без лишних выборок с диска. По сути, это почти самое эффективное, что можно сделать — прямая выборка с диска по файлу и номеру блока. А ваш от и до — это в лучшем случае индекс. И он может быть довольно оптимален — но может быть и так себе. И скажем у меня в проекте стоит задача автоматически выбрать способ разбиения (ваши от и до), и вот эта показанная тут оракловая магия — она оказывается чуть ли не самой простой, если вам нужно всего лишь поделить таблицу на какие-то куски. Потому что если вам кто-то (DBA) не сказал заранее, возьми вон тот индекс, то выбрать индекс автоматически — это та еще задача (по сути — повторить часть логики ораклового оптимизатора).
Sign up to leave a comment.
Как реализовать магию Sqoop для загрузки данных через Spark