我在单存储数据库中有一组现有的表,其中许多是列存储表。
我想要构建一个python脚本,它将把我的开发表迁移到生产表。开发表已经构建、分析并与现有表进行了比较,但是我不需要硬编码sql脚本来用dev替换现有的prod表,我希望有一种健壮的python方式来执行此操作。
下面是我到目前为止的代码:
import sqlalchemy
import datalake_toolset as tls # customized module for personal use
# connect to database and obtain metadata
engine = tls.create_lake_engine() # just creates my engine for my database
conn = engine.connect()
metadata = sqlalchemy.MetaData(conn)
metadata.reflect()
# identify the tables and isolate to interested tables only
tables = metadata.tables
tablenames = [x.name for x in tables.values()
if x.name.startswith('NamesOfInterest')]
# start with an example table and see if we can create a prod
table = [x for x in tablenames if 'SomeExampleString' in x][0]
# obtain the metadata for the new prod table
table_meta = tables.get(table)
# change table metadata name
table_meta.name = table_meta.name.replace('_Dev_', '_Prod_')
# now go create the prod table这就是我被困的地方。如何创建新的Prod表,其结构和数据类型与Dev表相同,,而保留了列存储功能(其中一些数据集将是数百万条记录,对于那么大的表,我对默认的行存储有业务约束)。
发布于 2021-12-10 23:46:28
我对sqlalchemy不太了解,但是您可以使用CREATE TABLE LIKE创建一个与现有表相同的模式的新表。有点像
CREATE TABLE t_prod LIKE t_dev;如果t_dev是一个列存储表,t_prod也将是(它们的show create table输出将是相同的)
https://stackoverflow.com/questions/70307961
复制相似问题