No se pueden copiar datos en AWS RedSpift -- python campo con amazon-web-services campo con amazon-redshift campo con boto3 camp Relacionados El problema

Unable to copy data into AWS RedShift


-1
vote

problema

Español

He intentado mucho sin embargo, no puedo copiar datos disponibles como archivo JSON en el cubo S3 (he leído solo acceso al cubo) a la tabla RedSpift utilizando Python Boto3. A continuación se muestra el código Python que estoy usando para copiar los datos. Usando el mismo código que pude crear las tablas en las que estoy tratando de copiar.

  import configparser import psycopg2 from sql_queries import create_table_queries, drop_table_queries   def drop_tables(cur, conn):     for query in drop_table_queries:         cur.execute(query)         conn.commit()   def create_tables(cur, conn):     for query in create_table_queries:         cur.execute(query)         conn.commit()   def main():     try:         config = configparser.ConfigParser()         config.read('dwh.cfg')          # conn = psycopg2.connect("host={} dbname={} user={} password={} port={}".format(*config['CLUSTER'].values()))         conn = psycopg2.connect(             host=config.get('CLUSTER', 'HOST'),             database=config.get('CLUSTER', 'DB_NAME'),             user=config.get('CLUSTER', 'DB_USER'),             password=config.get('CLUSTER', 'DB_PASSWORD'),             port=config.get('CLUSTER', 'DB_PORT')          )          cur = conn.cursor()          #drop_tables(cur, conn)         #create_tables(cur, conn)         qry = """copy DWH_STAGE_SONGS_TBL              from 's3://udacity-dend/song-data/A/A/A/TRAAACN128F9355673.json'              iam_role 'arn:aws:iam::xxxxxxx:role/MyRedShiftRole'              format as json 'auto';"""         print(qry)         cur.execute(qry)         # execute a statement         # print('PostgreSQL database version:')         # cur.execute('SELECT version()')         #         # # display the PostgreSQL database server version         # db_version = cur.fetchone()         # print(db_version)         print("Executed successfully")          cur.close()         conn.close()          # close the communication with the PostgreSQL      except Exception as error:         print("Error while processing")         print(error)   if __name__ == "__main__":     main()   

No veo ningún error en la consola de Pycharm, pero veo estado abortado en la consola de consultas RedSpift. No veo ninguna razón por la que haya sido abortado (o no sé dónde buscarlo)

ingrese la descripción de la imagen aquí

Otra cosa que he notado es cuando ejecuto la declaración de copia en Editor de consultas RedShift, se ejecuta FISA y los datos se mueven a la mesa. Intenté eliminar y volver a crear el clúster, pero no tengo suerte. No puedo entender lo que estoy haciendo mal. Gracias

Original en ingles

I tried a lot however I am unable to copy data available as json file in S3 bucket(I have read only access to the bucket) to Redshift table using python boto3. Below is the python code which I am using to copy the data. Using the same code I was able to create the tables in which I am trying to copy.

import configparser import psycopg2 from sql_queries import create_table_queries, drop_table_queries   def drop_tables(cur, conn):     for query in drop_table_queries:         cur.execute(query)         conn.commit()   def create_tables(cur, conn):     for query in create_table_queries:         cur.execute(query)         conn.commit()   def main():     try:         config = configparser.ConfigParser()         config.read('dwh.cfg')          # conn = psycopg2.connect("host={} dbname={} user={} password={} port={}".format(*config['CLUSTER'].values()))         conn = psycopg2.connect(             host=config.get('CLUSTER', 'HOST'),             database=config.get('CLUSTER', 'DB_NAME'),             user=config.get('CLUSTER', 'DB_USER'),             password=config.get('CLUSTER', 'DB_PASSWORD'),             port=config.get('CLUSTER', 'DB_PORT')          )          cur = conn.cursor()          #drop_tables(cur, conn)         #create_tables(cur, conn)         qry = """copy DWH_STAGE_SONGS_TBL              from 's3://udacity-dend/song-data/A/A/A/TRAAACN128F9355673.json'              iam_role 'arn:aws:iam::xxxxxxx:role/MyRedShiftRole'              format as json 'auto';"""         print(qry)         cur.execute(qry)         # execute a statement         # print('PostgreSQL database version:')         # cur.execute('SELECT version()')         #         # # display the PostgreSQL database server version         # db_version = cur.fetchone()         # print(db_version)         print("Executed successfully")          cur.close()         conn.close()          # close the communication with the PostgreSQL      except Exception as error:         print("Error while processing")         print(error)   if __name__ == "__main__":     main() 

I don't see any error in the Pycharm console but I see Aborted status in the redshift query console. I don't see any reason why it has been aborted(or I don't know where to look for that)

enter image description here

Other thing that I have noticed is when I run the copy statement in Redshift query editor , it runs fine and data gets moved into the table. I tried to delete and recreate the cluster but no luck. I am not able to figure what I am doing wrong. Thank you

           

Lista de respuestas

1
 
vote
vote
La mejor respuesta
 

Lectura rápida: parece que no ha cometido la transacción y la copia se retrasa cuando se cierra la conexión. Debe cambiar la configuración de la conexión para estar en "AutoCommit" o agregar un "commit ()" explícito.

 

Quick read - it looks like you haven't committed the transaction and the COPY is rolled back when the connection closes. You need to either change the connection configuration to be in "autocommit" or add an explicit "commit()".

 
 

Relacionados problema

0  Gestión de grupos de seguridad de AWS BOTO3  ( Aws boto3 security groups management ) 
Deseo encontrar qué grupos de seguridad se refieren solo a otro grupo de seguridad y no a la instancia de EC2 (por ejemplo). http://boto3.readthedocs.io/en /...

6  Error de codificación de JSON Publicación del mensaje SNS con Boto3  ( Json encoding error publishing sns message with boto3 ) 
Estoy tratando de enviar un mensaje de JSON simple a un tema SNS en Boto3. Sin embargo, sigo obteniendo una _jsonparsefailure en la etiqueta del mensaje y sol...

0  El paquete PYSFTP no funciona en el error de lanzamiento de la función Lambda: no se puede importar el nombre '_bcrypt' de 'bcrypt' (./lib/bcrypt/__init__.py)  ( Pysftp package is not working in lambda function throwing error cannot import ) 
Descarga (PIP Instale PYSTPP) y haga un archivo zip y cargue en una función Lambda. Pero no funciona en una función lambda. error de lanzamiento. Respuesta:...

60  ¿Cómo subir un archivo a S3 y hacerlo público usando Boto3?  ( How to upload a file to s3 and make it public using boto3 ) 
Soy capaz de cargar un archivo de imagen usando: Products3 Sin embargo, quiero hacer el archivo público también. Intenté buscar algunas funciones para e...

0  Cómo filtrar las instancias al verificar una cadena en el nombre de la instancia  ( How to filter instances by checking for a string in the instance name ) 
Estoy escribiendo un script de Python para recuperar una lista de instancias que fueron etiquetadas incorrectamente. Necesito filtrarlo marcado si existe una ...

57  S3 URLS - Obtener nombre de cubo y ruta  ( S3 urls get bucket name and path ) 
Tengo una variable que tiene la URL de AWS S3 Intent i = new Intent(Intent.ACTION_VIEW); i.setType("video/*"); i.setData(Uri.parse("... .3gp)); act.startAc...

1  Modelo de aplicación AWS Server sin nombre: cree evento S3 a Lambda  ( Aws serverless application model create s3 event to lambda ) 
Me gustaría usar el modelo de aplicación sin servidor (SAM) y la nubeformación para crear una función de lambda simple que se active cuando se crea un objeto ...

3  ¿Cómo subo un archivo a S3 usando Boto3 en Python en Heroku?  ( How do i upload a file to s3 using boto3 in python on heroku ) 
Todos los ejemplos en línea parecen usar BOTO. ¿Qué código puedo usar para cargar un archivo a S3 usando Boto3? Estoy tratando de usar el código de la docum...

7  Boto3 usa credenciales antiguas  ( Boto3 uses old credentials ) 
Estoy usando tkinter para crear una aplicación GUI que devuelve los grupos de seguridad. Actualmente, si desea cambiar sus credenciales (por ejemplo, si ing...

3  Boto3 S3 Client.put_bucket_logging () ¡Roto?  ( Boto3 s3 client put bucket logging broken ) 
Cuando llamo a la cliente.put_bucket_logging ( ) Método en Boto3 Para definir una ubicación para los archivos de registro de un cubo creado recientemente, r...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos