如何从 Pandas 数据帧自动获取 Redshift Serverless 的表创建语句

问题描述 投票:0回答:1

我有一个包含 parquet 文件的 S3 存储桶。

我需要分析该 parquet 文件并在 Redshift serverless 中创建所需的表。

import pyarrow.parquet as pq
df = pq.read_table(f"s3://{bucket_name}/{s3_path}").to_pandas()
table_create_statement = pd.io.sql.get_schema(df, table_name)

使用上面的代码,我能够获得数据框的创建语句作为表。

df
列包含 38 位数字。我得到的创建表语句包含
INTEGER
数据类型,该列的数字精度为 32,而不是
NUMERIC(38, 0)
DECIMAL(38, 0)

对于某些列,建表语句具有布尔类型,而实际数据包含数字或字符串 -
TRUE
FALSE

如何获取与 Redshift Serverless 兼容的表创建语句?

pandas amazon-redshift parquet pyarrow amazon-redshift-serverless
1个回答
0
投票

我最终使用

duckdb
库来获取镶木地板文件的架构

df = duckdb.sql(f"describe select * from read_parquet('{file_name}')").df()
col_type_dict = {col: col_type for col, col_type in zip(df["column_name"], df["column_type"])}

它为列提供了几乎精确的数据类型,并在此基础上对其他数据类型进行了一些更改。

© www.soinside.com 2019 - 2024. All rights reserved.