首页 > 解决方案 > 使用 Trino(以前称为 PrestoDB)将非 varchar 数据导出到 CSV 表

问题描述

我正在做一些基准测试,需要比较 ORC、Parquet 和 CSV 格式。我已将 TPC/H (SF1000) 导出到基于 ORC 的表中。当我想将它导出到 Parquet 时,我可以运行:

CREATE TABLE hive.tpch_sf1_parquet.region
  WITH (format = 'parquet')
  AS SELECT * FROM hive.tpch_sf1_orc.region

当我尝试使用 CSV 的类似方法时,我得到了错误Hive CSV storage format only supports VARCHAR (unbounded)。我假设它将其他数据类型(即bigint)转换为文本并将列格式存储在 Hive 元数据中。

我可以使用 将数据导出到 CSV trino --server trino:8080 --catalog hive --schema tpch_sf1_orc --output-format=CSV --execute 'SELECT * FROM nation,但随后它会被发送到文件中。虽然这适用于 SF1,但它很快就无法用于 SF1000 比例因子。另一个缺点是我的 Hive 元存储没有适当的元数据(尽管如果没有其他方法我可以手动修补它)。

有人知道如何使用 Hive 将我的 ORC/Parquet 数据转换为 CSV 吗?

标签: csvhiveprestotrino

解决方案


在 Trino Hive 连接器中,CSV 表只能包含varchar列。

varchar创建表时需要将导出的列转换为

CREATE TABLE region_csv
WITH (format='CSV')
AS SELECT CAST(regionkey AS varchar), CAST(name AS varchar), CAST(comment AS varchar)
FROM region_orc

请注意,您需要相应地更新您的基准查询,例如通过应用反向转换。


推荐阅读