es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Crear tablas similares a las existentes utilizando Sqlalchemy de Python y SQL de Singlestore.

Tengo un conjunto de tablas existentes en una base de datos de única instancia, muchas de las cuales son tablas de columnas.

Quiero construir un script en Python que migre mis tablas de desarrollo a tablas de producción. Las tablas en desarrollo ya están construidas, analizadas y comparadas con las tablas existentes, pero en lugar de codificar scripts de SQL para reemplazar las tablas de producción existentes con las de desarrollo, quiero una forma robusta en Python de realizar esta operación.

A continuación se muestra el código que tengo hasta ahora:

import sqlalchemy
import datalake_toolset as tls # módulo personalizado para uso personal

# Conectar a la base de datos y obtener la metadata
engine = tls.create_lake_engine() # solo crea el motor para mi base de datos
conn = engine.connect()
metadata = sqlalchemy.MetaData(conn)
metadata.reflect()

# Identificar las tablas y aislar solo las tablas de interés
tables = metadata.tables
tablenames = [x.name for x in tables.values() 
              if x.name.startswith('NombresDeInterés')]

# Comenzar con una tabla de ejemplo y ver si podemos crear una de producción
table = [x for x in tablenames if 'AlgunaCadenaDeEjemplo' in x][0]

# Obtener la metadata de la nueva tabla de producción
table_meta = tables.get(table)

# Cambiar el nombre de la metadata de la tabla
table_meta.name = table_meta.name.replace('_Dev_', '_Prod_')

# Ahora crear la tabla de producción

Aquí es donde me quedo atascado… ¿cómo puedo crear la nueva tabla, Prod, con la misma estructura y tipos de datos que la tabla Dev, manteniendo al mismo tiempo la función de columna (algunos de estos conjuntos de datos tendrán millones de registros y tengo restricciones comerciales en contra de la estructura de fila predeterminada para tablas de ese tamaño)?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para crear la nueva tabla Prod con la misma estructura y tipos de datos que la tabla Dev, manteniendo la característica de columnstore, podemos utilizar el siguiente script en Python:

    import sqlalchemy
    import datalake_toolset as tls # módulo personalizado para uso personal
    
    # Conectar a la base de datos y obtener el metadata
    engine = tls.create_lake_engine() # solo crea mi motor para mi base de datos
    conn = engine.connect()
    metadata = sqlalchemy.MetaData(conn)
    metadata.reflect()
    
    # Identificar las tablas y aislar solo las tablas de interés
    tables = metadata.tables
    tablenames = [x.name for x in tables.values() 
                  if x.name.startswith('NombresDeInteres')]
    
    # Comenzar con una tabla de ejemplo y ver si podemos crear una tabla prod
    table = [x for x in tablenames if 'AlgunEjemploString' in x][0]
    
    # Obtener el metadata de la nueva tabla prod
    table_meta = tables.get(table)
    
    # Cambiar el nombre del metadata de la tabla
    table_meta.name = table_meta.name.replace('_Dev_', '_Prod_')
    
    # Crear la tabla prod con la misma estructura y tipos de datos que la tabla Dev
    create_table_statement = sqlalchemy.schema.CreateTable(table_meta)
    create_table_statement = create_table_statement.prefix_with("CREATE COLUMNSTORE TABLE")
    conn.execute(create_table_statement)
    

    En este script, utilizamos el método sqlalchemy.schema.CreateTable para crear una nueva declaración CREATE TABLE basada en el metadata de la tabla Dev existente. Luego agregamos el prefijo “CREATE COLUMNSTORE TABLE” a la declaración para asegurarnos de que la nueva tabla se cree como una tabla columnstore. Finalmente, ejecutamos la declaración utilizando el método conn.execute para crear la nueva tabla Prod con la misma estructura y tipos de datos que la tabla Dev, manteniendo la característica de columnstore.

Comments are closed.