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.

Hyper API y AWS EC2.

Hola, soy nuevo en Tableau Server y AWS EC2.

Estoy tratando de escribir un script en Python para conectarme a una base de datos de AWS EC2, obtener la tabla en un archivo .hyper usando la API de Hyper de Tableau y luego cargarlo en Tableau Server.

He buscado pero no he encontrado resultados. Actualmente no estoy seguro de cómo conectar a la base de datos de AWS EC2. Hasta ahora solo he encontrado un ejemplo en YouTube que muestra cómo conectarse a una base de datos de MSAccess.

El repositorio de GitHub para ejemplos de la API de Hyper no tiene el ejemplo de sintaxis que necesito para AWS EC2.
https://github.com/tableau/hyper-api-samples

Espero que alguien que sepa cómo hacer esto pueda iluminarme de alguna manera.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    ¡Hola!

    Conectarse a AWS EC2 desde Tableau Server utilizando Python y Hyper API puede parecer complicado al principio, pero definitivamente se puede hacer.

    Para conectarse a la base de datos de AWS EC2, primero necesitarás conocer el endpoint y las credenciales de seguridad de la instancia. Una vez que tengas esta información, puedes utilizar la biblioteca psycopg2 para conectarte a la base de datos en Python.

    A continuación, necesitarás utilizar la Hyper API para extraer los datos de la base de datos y guardarlos como un archivo .hyper. Puedes utilizar el siguiente código como punto de partida:

    from tableauhyperapi import (
        HyperProcess,
        Telemetry,
        Connection,
        CreateMode,
        NOT_NULLABLE,
        NULLABLE,
        SqlType,
        TableDefinition,
        escape_name,
        escape_string_literal,
    )
    
    # Define la definición de la tabla
    table_definition = TableDefinition(
        table_name="mi_tabla",
        columns=[
            ("columna1", SqlType.integer(), NOT_NULLABLE),
            ("columna2", SqlType.text(), NULLABLE),
            ("columna3", SqlType.date(), NOT_NULLABLE),
        ],
    )
    
    # Inicia el proceso de Hyper
    with HyperProcess(telemetry=Telemetry.DO_NOT_SEND_USAGE_DATA_TO_TABLEAU) as hyper:
    
        # Crea un nuevo archivo Hyper
        with Connection(endpoint=hyper.endpoint,
                        database="mi_base_de_datos.hyper",
                        create_mode=CreateMode.CREATE_AND_REPLACE) as connection:
    
            # Crea la tabla en el archivo Hyper
            connection.catalog.create_table(table_definition)
    
            # Conéctate a la base de datos de AWS EC2 utilizando psycopg2
            conn = psycopg2.connect(database="mi_base_de_datos",
                                    user="mi_usuario",
                                    password="mi_contraseña",
                                    host="mi_endpoint")
    
            # Consulta la base de datos e inserta los datos en el archivo Hyper
            with conn.cursor() as cur:
                cur.execute("SELECT * FROM mi_tabla")
                for row in cur.fetchall():
                    connection.execute_command(
                        command=f"INSERT INTO {table_definition.table_name} VALUES ({row[0]}, {escape_string_literal(row[1])}, {escape_string_literal(row[2])})"
                    )
    
    # Publica el origen de datos en el servidor de Tableau utilizando la API de Tableau
    # ...
    

    Una vez que hayas guardado los datos en un archivo .hyper, puedes utilizar la API de Tableau para publicar el origen de datos en el servidor de Tableau. La documentación de la API de Tableau tiene un excelente ejemplo de cómo hacer esto:

    import tableauserverclient as TSC
    
    # Conéctate al servidor de Tableau
    tableau_auth = TSC.TableauAuth('mi_usuario', 'mi_contraseña')
    server = TSC.Server('https://mi_servidor_tableau')
    server.auth.sign_in(tableau_auth)
    
    # Publica el origen de datos
    with open('mi_origen_de_datos.hyper', 'rb') as f:
        data_source = TSC.DataSourceItem(project_id='mi_id_proyecto', name='Mi Origen de Datos.hyper', file=f)
        server.datasources.publish(data_source)
    
    # Cierra la sesión en el servidor de Tableau
    server.auth.sign_out()
    

    Espero que esto te ayude a iniciar tu proyecto. ¡Buena suerte!

Comments are closed.