gpt4 book ai didi

hadoop - 我可以通过在 Hive 中通过 "CREATE TABLE AS SELECT....."创建的表进行聚类/分桶吗?

转载 作者:可可西里 更新时间:2023-11-01 14:14:30 33 4
gpt4 key购买 nike

我正在尝试在 Hive 中创建一个表

CREATE TABLE BUCKET_TABLE AS 
SELECT a.* FROM TABLE1 a LEFT JOIN TABLE2 b ON (a.key=b.key) WHERE b.key IS NUll
CLUSTERED BY (key) INTO 1000 BUCKETS;

此语法失败 - 但我不确定是否可以执行此组合语句。有任何想法吗?

最佳答案

遇到这个问题,发现没有提供答案。我进一步查看并在 Hive 文档中找到了答案。

这永远行不通,因为 CTAS 有以下限制:

  1. 目标表不能是分区表。
  2. 目标表不能是外部表。
  3. 目标表不能是列表分桶表。

来源:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-CreateTableAsSelect%28CTAS

此外 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
...
[CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
...
[AS select_statement];

聚类需要先定义column然后cfg去As select_statement 所以这个时候是不可能的。

您可以选择更改表并添加存储桶,但这不会更改现有数据。

CREATE TABLE BUCKET_TABLE 
STORED AS ORC AS
SELECT a.* FROM TABLE1 a LEFT JOIN TABLE2 b ON (a.key=b.key) WHERE b.key IS NUll limit 0;
ALTER TABLE BUCKET_TABLE CLUSTERED BY (key) INTO 1000 BUCKETS;
ALTER TABLE BUCKET_TABLE SET TBLPROPERTIES ('transactional'='true');
INSERT INTO BUCKET_TABLE
SELECT a.* FROM TABLE1 a LEFT JOIN TABLE2 b ON (a.key=b.key) WHERE b.key IS NUll;

关于hadoop - 我可以通过在 Hive 中通过 "CREATE TABLE AS SELECT....."创建的表进行聚类/分桶吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24897410/

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