У меня есть таблица Hive, которая разделена полем partitionDate. Я могу прочитать выбранный мной раздел с помощью простого
select * from myTable where partitionDate = '2000-01-01'
Моя задача - указать выбранный мной раздел динамически. Т.е. сначала я хочу прочитать его из какой-то таблицы, и только потом запустить select to myTable. И конечно, хочется, чтобы использовалась мощность перегородок.
Я написал запрос, который выглядит как
select * from myTable mt join thatTable tt on tt.reportDate = mt.partitionDate
Запрос работает, но похоже, что разделы не используются. Запрос работает слишком долго.
Я попробовал другой подход:
select * from myTable where partitionDate in (select reportDate from thatTable)
.. и снова вижу, что запрос работает слишком медленно.
Есть ли способ реализовать это в Hive?
обновление: создать таблицу для myTable
CREATE TABLE `myTable`(
`theDate` string,
')
PARTITIONED BY (
`partitionDate` string)
TBLPROPERTIES (
'DO_NOT_UPDATE_STATS'='true',
'STATS_GENERATED_VIA_STATS_TASK'='true',
'spark.sql.create.version'='2.2 or prior',
'spark.sql.sources.schema.numPartCols'='1',
'spark.sql.sources.schema.numParts'='2',
'spark.sql.sources.schema.part.0'='{"type":"struct","fields":[{"name":"theDate","type":"string","nullable":true}...
'spark.sql.sources.schema.part.1'='{"name":"partitionDate","type":"string","nullable":true}...',
'spark.sql.sources.schema.partCol.0'='partitionDate')
analyze table tab compute statistics;
и проверить? Он должен следовать за разделом. Если только тип данныхpartitionDate
не равенtimestamp/date
, а тип данных вашей другой таблицы -string
. Можете ли вы также запуститьexplain elect * from myTable mt join thatTable tt on tt.reportDate = mt.partitionDate
и проверить, попадает ли он в раздел? - person Koushik Roy   schedule 21.07.2021create table
из mytable. хотел посмотреть, правильно ли это разделено. - person Koushik Roy   schedule 21.07.2021