通过精确插入的时间戳在hive中动态划分日期

8dtrkrch  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(492)

我需要将数据插入到给定的外部表中,该表应按插入日期进行分区。我的问题是hive如何处理时间戳生成?当我为所有插入的记录选择时间戳时,如下所示:

WITH delta_insert AS (
        SELECT trg.*, from_unixtime(unix_timestamp()) AS generic_timestamp
        FROM target_table trg
        )
SELECT *
FROM delta_insert;

即使查询需要很长时间才能取消,所有记录的时间戳是否总是相同的?
或者我应该只选择一个实际的时间戳,并将它与之后选择的所有内容连接起来吗?

WITH insert_timestamp AS (
    SELECT from_unixtime(unix_timestamp()) AS insert_timestamp
),
delta_insert AS (
        SELECT trg.*, insert_timestamp.insert_timestamp
        FROM target_table trg, insert_timestamp
        )
SELECT *
FROM delta_insert;

由于不建议在配置单元中执行交叉连接,我想知道什么是最好的方法,因为我没有足够的测试数据来模拟长时间运行的查询,以确保它们插入到增量负载的同一分区中。

woobm2wo

woobm2wo1#

不,对于所有记录,使用unix\u timestamp()生成的时间戳并不总是相同的。此函数是不确定的,并阻止对查询进行适当的优化-自2.0以来,此函数一直被弃用,取而代之的是current\u timestamp常量(只为查询计算一次)。请参阅此文档:日期函数,此项不适用 unix_timestamp(string date) 有争论。 unix_timestamp(string date) 函数是确定的。 current_timestamp 返回查询求值开始时的当前时间戳(从Hive1.2.0开始)。同一查询中当前时间戳的所有调用都返回相同的值。如果需要日期,请使用 current_date 功能。

相关问题