根据API端点推断的字段类型自动创建雪花表的方法?(Python)

根据API端点推断的字段类型自动创建雪花表的方法?(Python),python,sqlalchemy,snowflake-cloud-data-platform,endpoint,snowflake-schema,Python,Sqlalchemy,Snowflake Cloud Data Platform,Endpoint,Snowflake Schema,假设我有一个数据帧,它的行如下: {'ID':'123245','Comment':'This is my longer comment','Tax':1.07,'Units':2.0} Python中是否有一种方法可以执行以下操作: max([len(str(i)) for i in set(df['Comments'])]) 并推断max varchar和其他元数据,然后我可以构造一个SQL查询来创建该表(在我的例子中,是针对SnowFlake) 由于它需要额外的未提及的逻辑(例如,尝试

假设我有一个数据帧,它的行如下:

{'ID':'123245','Comment':'This is my longer comment','Tax':1.07,'Units':2.0}
Python中是否有一种方法可以执行以下操作:

max([len(str(i)) for i in set(df['Comments'])])
并推断max varchar和其他元数据,然后我可以构造一个SQL查询来创建该表(在我的例子中,是针对SnowFlake)

由于它需要额外的未提及的逻辑(例如,尝试转换为int、float、datetime等),可能这通常是在现有库中完成的

现在,我需要一些时间让每个端点手动检查字段,并推断如何在Snowflake中创建每个表,同样,手动。希望将此过程自动化


当然,在没有像库这样更复杂的东西的情况下实现自动化的一个方面是,现在的max字段(例如199个字符长的注释)很可能很快会被将来输入到这些字段的输入所违反,比如,四舍五入为“max”varchar,例如在无法转换为float/int/date/等时告诉这样的算法一个最小varchar。

首先,如中所述,显式设置
varchar
列的最大长度对性能和存储没有影响,因此不必担心

关于您的一般问题,您可以使用它们的本机将数据帧简单地上传到您的环境中。将Python类型与雪花类型进行匹配是自动完成的

如果只想创建表而不插入数据,请上载
df.iloc[:0]
。如果您想获得
create table
SQL,可以使用。下面是一个示例实现

将熊猫作为pd导入
导入snowflake.com连接器
从snowflake.connector.pandas_工具导入pd_编写器
从snowflake.sqlalchemy导入URL
进口炼金术
凭证={**your\u snowflake\u凭证}
#创建示例数据帧
数据={
“ID”:“123245”,
“评论”:“这是我较长的评论”,
“税”:1.07,
“单位”:2,
}
df=pd.DataFrame([data])
#上载空数据帧
df.iloc[:0]。到_sql(
“测试表”,
sqlalchemy.create_引擎(URL(**凭据)),
索引=假,
方法=pd_编写器,
)
#检索CREATETABLE语句并删除临时表
#(如果你真的想)
sql=“选择get_ddl('table','test_table')”
使用snowflake.connector.connect(**凭据)作为连接:
使用connection.cursor()作为游标:
create_table_sql=cursor.execute(sql).fetchone()[0]
cursor.execute(“drop table test\u table”)
打印(创建\u表\u sql)
输出:

创建或替换表测试表(
ID VARCHAR(16777216),
注释VARCHAR(16777216),
税收浮动,
单位数量(38,0)
);