我有一个包含 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 兼容的表创建语句?
我最终使用
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"])}
它为列提供了几乎精确的数据类型,并在此基础上对其他数据类型进行了一些更改。