performance - 在从 s3 到 vertica 的分隔文件上加载 parquet 文件时 Vertica 性能下降
问题描述
我有 20 亿条 GZIP 压缩记录的镶木地板文件和 SNAPPY 压缩相同的数据。此外,我有相同的 20 亿条记录的分隔文件。我们在 AWS 产品中有 72 个 Vertica 节点,我们看到 parquet 文件的性能大幅提升,同时使用 COPY 命令将数据从 s3 移动到 Vertica,而不是使用分隔文件。Parquet 比 Delimited 文件多花费 7 倍的时间,尽管分隔文件的大小是 Parquet 的 50 倍。
以下是我们进行的测试的统计数据。
总文件大小为
镶木地板 GZIP - 6 GB
Parquet Snappy - 9.2 GB
分隔 - 450GB
下面是用于 Parquet 和 Delimited 的复制命令。当我们在复制查询中删除“无提交”时,我们确实看到了大约 2 分钟的改进。
分隔文件
COPY schema.table1 ( col1,col2,col3,col4,col5 ) FROM 's3://path_to_delimited_s3/*' DELIMITER E'\001' NULL AS '\N' NO ESCAPE ABORT ON ERROR DIRECT NO COMMIT;
镶木地板文件
COPY schema.table2 (col1,col2,col3,col4,col5 ) FROM 's3://path_to_parquet_s3/*' PARQUET ABORT ON ERROR DIRECT NO COMMIT;
我们很惊讶地看到这个尖峰 wrt parquet 文件,这是 parquet 副本的预期吗?任何指示,想法都会非常有帮助。
谢谢
解决方案
不知道更多,很难回答。您应该再次监视 LOAD_STREAMS 以了解发生了什么。
一个原因可能是s3://path_to_parquet_s3/*
CSV 版本中的各种文件在加载过程的节点之间以最佳方式分布,因此大大提高了并行性。
要计算解析线程的数量 - 在您的负载运行时,找到您正在运行的 LOAD_STREAM ( WHERE is_executing
...),然后将其与 LOAD_SOURCES - 连接起来USING(transaction_id,statement_id)
。
推荐阅读
- sumo - 获取车辆的横向和纵向位置
- java - 你如何为 Java 制作 Kotlin 静态变量和函数?
- postgresql - 是否可以在角色列表中包含时区?
- python - 排除可能的图像位置
- vba - 遍历行选择相同的列向下一行直到第 1000 行
- python - 使用 mysql.connector.connect 连接到 MySQL DB 失败,没有捕获错误
- python - 获取不带文件名的文件路径
- javascript - 谷歌使用相同的 SetStyle 函数映射多个 JSON 覆盖
- r - 如何将元素作为额外项目附加到列表中?
- bash - 如何从错误中修复我的 bash 脚本:意外标记“完成”附近的语法错误?