我想在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有以下限制:
此外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];
群集需要定义列,然后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;
看起来这是不可能的。在尝试向ambari提交此类查询时:
CREATE TABLE ready_requests
CLUSTERED BY (device) INTO 64 BUCKETS
as
SELECT ...;
我有类似的东西:“CREATE-TABLE-AS-SELECT不支持在目标表中进行分区”即使它不是正确的消息,看起来也不支持bucketing
有文档说不支持分区,请参阅link,对于存储桶没有这样的信息,但看起来我们有同样的问题
希望它能帮到你。无需将事务属性添加到true(存在于第一个注释中),因为当我们需要启用ACID属性并且需要存在bucketing和orc格式时,需要将TRANSACTION Properties设置为true。
您必须在clustered by子句中使用非空列。