You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将CSV转为parquet-cpp 1.5.1-SNAPSHOT版本Parquet文件供Teradata读取

调整Parquet输出版本并适配Teradata的解决方案

一、设置Parquet输出版本适配parquet-cpp 1.5.1-SNAPSHOT

你之前的代码默认生成高版本Parquet格式,要兼容parquet-cpp 1.5.1-SNAPSHOT,只需在写入时指定对应参数即可:

  • 核心参数version='1.0':Parquet格式V1版本完全兼容parquet-cpp 1.5.x系列,对应你需要的1.5.1-SNAPSHOT版本
  • 配套参数coerce_timestamps='ms':将pandas默认的纳秒精度时间戳转为毫秒精度,避免老版本Parquet解析报错
  • 若需要元数据中完全显示parquet-cpp version 1.5.1-SNAPSHOT标识,可手动覆盖写入元数据的created_by字段

二、适配Teradata的Parquet生成规则

根据你提到的Teradata限制,生成兼容文件需遵守以下规则:

  • 所有字段仅使用基础标量类型(整数、浮点数、字符串、时间戳),禁止生成STRUCT、MAP、LIST、ENUM等复杂类型,不要有嵌套结构
  • 尽量关闭高级编码特性:如果出现读取异常,可禁用字典编码use_dictionary=False
  • 选择兼容的压缩格式:建议使用snappy或不压缩,避免使用zstd、lz4等新压缩算法

三、完整可运行代码

import pandas as pd
import pyarrow.parquet as pq
import pyarrow as pa

# 读取CSV文件
df = pd.read_csv('27.csv')
# 处理datetime字段类型,避免生成非标准类型
df['datetime'] = pd.to_datetime(df['datetime'])

# 转换为pyarrow Table,方便精细控制写入参数
table = pa.Table.from_pandas(df, preserve_index=False)

# 自定义元数据,匹配要求的版本标识
custom_metadata = {b'created_by': b'parquet-cpp version 1.5.1-SNAPSHOT'}

# 写入兼容文件
pq.write_table(
    table,
    '27_teradata_compatible.parquet',
    version='1.0',  # 指定Parquet格式版本,兼容1.5.x系列
    coerce_timestamps='ms',  # 时间戳转毫秒精度,适配老版本
    compression='snappy',  # 兼容度最高的压缩格式,也可填'none'不压缩
    use_dictionary=False,  # 禁用字典编码,解决部分Teradata读取异常
    write_statistics=False,  # 关闭统计信息,减少兼容性问题
    metadata=custom_metadata  # 写入自定义版本标识
)

# 验证写入结果
metadata = pq.read_metadata('27_teradata_compatible.parquet')
print(metadata)
da = pd.read_parquet('27_teradata_compatible.parquet')
print(da.head(10))

内容的提问来源于stack exchange,提问作者2015evanotes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 05:15:03