【发布时间】:2019-10-30 02:58:47
【问题描述】:
我有一组非 ORC 格式且未分桶的配置单元表。我想将它们的格式更改为 ORC 并将它们放入桶中。在整个网络中找不到具体的答案。任何答案或指导表示赞赏。 Hive 版本是 2.3.5
或者如果可以在 spark (pyspark 或 scala) 中做到这一点?
最简单的解决方案是创建一个存储桶并采用 ORC 格式的新表,然后从旧表中插入该表。寻找就地解决方案。
【问题讨论】:
我有一组非 ORC 格式且未分桶的配置单元表。我想将它们的格式更改为 ORC 并将它们放入桶中。在整个网络中找不到具体的答案。任何答案或指导表示赞赏。 Hive 版本是 2.3.5
或者如果可以在 spark (pyspark 或 scala) 中做到这一点?
最简单的解决方案是创建一个存储桶并采用 ORC 格式的新表,然后从旧表中插入该表。寻找就地解决方案。
【问题讨论】:
蜂巢:
使用临时表读取未分桶的数据(假设为TEXTFILE 格式),使用以下命令:
CREATE TABLE staging_table(
col1 colType,
col2 colType, ...
coln colType
)
STORED AS
TEXTFILE
LOCATION
'/path/of/input/data';
CREATE TABLE target_table(
col1 colType,
col2 colType, ...
coln colType
)
CLUSTERED BY(col1) INTO 10 BUCKETS
STORED AS ORC;
INSERT OVERWRITE TABLE table_bucketed
SELECT
col1, col2, ..., coln
FROM
staging_table;
同样可以用**Spark** DataFrame APIs(假设CSV格式)像这样:
df = spark.read.format("csv")
.option("inferSchema", "true")
.option("header", "true")
.option("delimiter", ",")
.option("path", "/path/of/input/data/")
.load()
df.write.format("orc")
.option("path", "/path/of/output/data/")
.save()
【讨论】:
创建bucketed table 并使用INSERT OVERWRITE 将数据加载到其中:
CREATE TABLE table_bucketed(col1 string, col2 string)
CLUSTERED BY(col1) INTO 10 BUCKETS
STORED AS ORC;
INSERT OVERWRITE TABLE table_bucketed
select ...
from table_not_bucketed
【讨论】: