Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

727
Views
Error de delimitador no encontrado: carga de AWS Redshift desde s3 con Kinesis Firehose

Estoy usando Kinesis firehose para transferir datos a Redshift a través de S3. Tengo un archivo csv muy simple que se ve así. Firehose lo pone en s3 pero Redshift falla con el error Delimitador no encontrado. He mirado literalmente todas las publicaciones relacionadas con este error, pero me aseguré de que el delimitador esté incluido.

Expediente

 GOOG,2017-03-16T16:00:01Z,2017-03-17 06:23:56.986397,848.78 GOOG,2017-03-16T16:00:01Z,2017-03-17 06:24:02.061263,848.78 GOOG,2017-03-16T16:00:01Z,2017-03-17 06:24:07.143044,848.78 GOOG,2017-03-16T16:00:01Z,2017-03-17 06:24:12.217930,848.78

O

 "GOOG","2017-03-17T16:00:02Z","2017-03-18 05:48:59.993260","852.12" "GOOG","2017-03-17T16:00:02Z","2017-03-18 05:49:07.034945","852.12" "GOOG","2017-03-17T16:00:02Z","2017-03-18 05:49:12.306484","852.12" "GOOG","2017-03-17T16:00:02Z","2017-03-18 05:49:18.020833","852.12" "GOOG","2017-03-17T16:00:02Z","2017-03-18 05:49:24.203464","852.12"

Tabla de corrimiento al rojo

 CREATE TABLE stockvalue ( symbol VARCHAR(4), streamdate VARCHAR(20), writedate VARCHAR(26), stockprice VARCHAR(6) );
  • errores errores

  • Por si acaso, así es como se ve mi flujo de kinesis Firehose

¿Puede alguien señalar qué puede estar mal con el archivo? Agregué una coma entre los campos. Todas las columnas en la tabla de destino son varchar, por lo que no debería haber ningún motivo para el error de tipo de datos. Además, las longitudes de las columnas coinciden exactamente entre el archivo y la tabla de corrimiento al rojo. He intentado incrustar columnas entre comillas dobles y sin ellas.

about 4 years ago · Santiago Trujillo
3 answers
Answer question

0

¿Puedes publicar el comando COPY completo? Está cortado en la captura de pantalla.

Supongo que le falta DELIMITER ',' en su comando COPY. Intente agregar eso al comando COPY.

about 4 years ago · Santiago Trujillo Report

0

Estuve atascado en esto durante horas y, gracias a la respuesta de Shahid, me ayudó a resolverlo.

El uso de mayúsculas y minúsculas en los nombres de las columnas es importante

Redshift siempre tratará las columnas de su tabla como minúsculas, por lo que al asignar claves JSON a columnas, asegúrese de que las claves JSON estén en minúsculas , por ejemplo

Su archivo JSON se verá así:

 {'id': 'val1', 'name': 'val2'}{'id': 'val1', 'name': 'val2'}{'id': 'val1', 'name': 'val2'}{'id': 'val1', 'name': 'val2'}

Y la instrucción COPY se verá como

 COPY latency(id,name) FROM 's3://<bucket-name>/<manifest>' CREDENTIALS 'aws_iam_role=arn:aws:iam::<aws-account-id>:role/<role-name>' MANIFEST json 'auto';

Las configuraciones dentro de Firehose deben tener los nombres de columna especificados (nuevamente, en minúsculas). Además, agregue lo siguiente a las opciones de COPIA de Firehose:

 json 'auto' TRUNCATECOLUMNS blanksasnull emptyasnull

Cómo llamar a put_records desde Python:

A continuación se muestra un fragmento que muestra cómo usar las funciones put_records con kinesis en python:

'objetos' pasados a la función 'put_to_stream' es una matriz de diccionarios:

 def put_to_stream(objects): records = [] for metric in metrics: record = { 'Data': json.dumps(metric), 'PartitionKey': 'swat_report' }; records.append(record) print(records) put_response = kinesis_client.put_records(StreamName=kinesis_stream_name, Records=records) flush ``
about 4 years ago · Santiago Trujillo Report

0

1- Debe agregar FORMAT AS JSON 's3://yourbucketname/aJsonPathFile.txt'. AWS no ha mencionado esto ya. Tenga en cuenta que esto solo funciona cuando sus datos están en formato JSON como

{'atributo1': 'val1', 'atributo2': 'val2'} {'atributo1': 'val1', 'atributo2': 'val2'} {'atributo1': 'val1', 'atributo2': 'val2' } {'atributo1': 'val1', 'atributo2': 'val2'}

2- También debe verificar el orden de las columnas en kinesis firehouse y en el archivo csv e intente agregar

TRUNCATECOLUNS en blanco como nulo vacío como nulo

3- Un ejemplo

COPY testrbl3 ( eventId,serverTime,pageName,action,ip,userAgent,ubicación,plateform,language,campaña,content,source,medium,productID,colorCode,scrolltoppercentage) FROM 's3://bucketname/' CREDENCIALES 'aws_iam_role=arn: aws:iam:::role/' MANIFEST json 'auto' TRUNCATECOLUMNS en blanco como nulo vacío como nulo;

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!