Улей раздел по выражению или шаблону - PullRequest
0 голосов
/ 16 января 2020

Я нашел скрипт hive-ql, подобный этому:

ALTER TABLE dwd.o_p_data_reports
DROP IF EXISTS PARTITION (partition_dt='${#date(0,0,-1):yyyyMMdd#}');

insert overwrite table dwd.o_p_data_reports partition (partition_dt = '${#date(0,0,-1):yyyyMMdd#}')
-- no changed
select 
 dwd.id
,dwd.title
,dwd.desc
,dwd.source
,dwd.source_url
,dwd.download_url
,dwd.cloud_url
,dwd.publish_date
,dwd.created_at
,dwd.updated_at
,dwd.last_fetched_at
,dwd.size
,dwd.cate
,dwd.author
,dwd.site
,dwd.page_num
,dwd.sectors
from 
(select * from dwd.o_p_data_reports where partition_dt = '${#date(0,0,-2):yyyyMMdd#}') dwd 
left join 
(select * from ods.o_p_data_reports where partition_dt = '${#date(0,0,-1):yyyyMMdd#}') ods  
on dwd.id = ods.id  
where ods.id is null 

И есть что-то необычное, '${#date(0,0,-1):yyyyMMdd#}' выглядит как выражение, которое будет давать определенное значение до выполнения всего сценария запроса.

Этот сценарий хорошо работает на сервере, и partition_dt будет похож на 20200115. Однако на моем собственном компьютере произойдет сбой при непосредственном выполнении в оболочке куста, поскольку partition_dt в этом случае выдаст только $.

Из того, что я знаю, partition_dt = '${#date(0,0,-1):yyyyMMdd#}':

  1. не вызов функции hive, поскольку
  2. не переменная hive, поскольку в первой строке не заданы переменные, а формат неправильный (то есть ${foobar}, а не ${#foobar#})
  3. не UDF, поскольку нет импорта UDF
  4. , а не раздел Dynami c, потому что это приведет к сбою с разделом Dynami c (с использованием функции даты и времени Hive, такой как date_add()) на сервер, но успех с этим.

Так что же такое '${#date(0,0,-1):yyyyMMdd#}'?

...