gpt4 book ai didi

hadoop - 在 Hive 中插入带有分区字段的数据列表列

转载 作者:可可西里 更新时间:2023-11-01 16:28:25 26 4
gpt4 key购买 nike

首先让我们设置一个测试环境:

CREATE TABLE IF NOT EXISTS source_table (
`col1` TIMESTAMP,
`col2` STRING
);

CREATE TABLE IF NOT EXISTS dest_table (
`col1` TIMESTAMP,
`col2` STRING,
`col3` STRING
)
PARTITIONED BY (day STRING)
STORED AS AVRO;

INSERT INTO TABLE source_table VALUES ('2018-03-21 17:08:04.401', 'test1'), ('2018-03-22 12:02:04.222', 'test2'), ('2018-03-22 07:21:04.111', 'test3');

如何在插入期间列出列名并动态放置分区值?以下命令不起作用:

INSERT INTO TABLE dest_table(col1, col2) PARTITION(day) SELECT col1, col2, date_format(col1, 'yyyy-MM-dd') FROM source_table;

顺便说一下,如果没有在 INSERT INTO 命令中列出 dest_table 的列,如果有两个具有相同列号的表,一切正常。如果我的 dest_table 的字段比 source_table 多怎么办?

谢谢你帮助我。

附言

好的,如果我硬编码 NULL 就可以了。我将问题悬而未决,因为可能有更好的方法来实现这一点。

INSERT INTO TABLE dest_table PARTITION(day) SELECT col1, col2, NULL, date_format(col1, 'yyyy-MM-dd') FROM source_table;

无论如何,这个方法严格限制列的顺序?在实际场景中,我如何处理指定映射的大量列以避免错误?

最佳答案

当您想列出特定列时,插入分区表的语法如下所示。您不需要将 null 放在 col3 上,因为 Hive 将放置默认值 NULL,因为它在插入期间不在列列表中。

  INSERT INTO TABLE dest_table PARTITION (day)(col1, col2, day)
SELECT col1, col2, date_format(col1, 'yyyy-MM-dd') FROM source_table;

Result:
col1 col2 col3 day
2018-03-22 12:02:04.222 test2 NULL 2018-03-22
2018-03-22 07:21:04.111 test3 NULL 2018-03-22
2018-03-21 17:08:04.401 test1 NULL 2018-03-21

关于hadoop - 在 Hive 中插入带有分区字段的数据列表列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49531678/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com