csv - 使用 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 吗?
解决方案
在 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
请注意,您需要相应地更新您的基准查询,例如通过应用反向转换。
推荐阅读
- c++ - 使用 OpenCV 计数硬币
- python - 如何修复 OSError:[WinError 6] 句柄对 Python 和 Selenium 无效?
- google-apps-script - 如何获取活动用户并放置在特定单元格中?
- python - 在这种情况下,“'tuple' 对象没有属性 'first_name' 是什么意思?
- excel - 如何显示用户表单,然后隐藏,然后再次显示而不再次运行用户表单激活代码
- android - 在 Android 9 上打开时停止工作,如何解决?
- c# - 您如何以编程方式在自定义 WPF 面板实现中创建新控件?
- java - 我可以使用 TestInfo 接口从 @BeforeEach 中排除单个测试吗?
- html - 如何在加载时停止 FOUT(无样式文本的闪烁)
- android - Kotlin:在折线图 Mpandroidchart 的 x 轴上设置自定义标签