Carga de protobuf fecha a bigquery

Soy nuevo en datos protobuf y he generado código de pitón del archivo proto por googling, ahora quiero cargar datos de protobuf que está en GCS a bigquery. Estaba buscando mucho para encontrar una manera de cargar datos de protobuf directamente a la bigquery.

Estaba pasando por unos pocos repos github como abajo.

https://github.com/googleapis/java-bigquerystorage

¿Puede alguien explicarme o guiarme en un simple ejemplo sobre cómo cargar datos de protobuf a bigquery.

Pregunta hecha hace 3 años, 5 meses, 0 días - Por scriptsphinx


3 Respuestas:

  • Una manera sería ejecutar código para convertir los datos protobuf a algo que BigQuery sabe leer: JSON, Avro o Parquet.
    El más simple sería JSON. Exportar los datos en formato JSON a algún lugar en GCS, y luego tener Bigquery cargar los datos JSON. La manera más simple es a través de la herramienta de comandos bq, por ejemplo:

    bq load --ignore_unknown_values --autodetect --source_format=NEWLINE_DELIMITED_JSON datasetName.tableName gs://yourGCSpath
    

    Esto le pedirá a BQ que derive el esquema de tabla de los datos JSON. Si desea cargar en una tabla existente con un esquema conocido puede proporcionar un archivo de esquema formateado JSON como un argumento.

    Los datos de carga en la barbacoa son gratuitos, pero hay algunas limitaciones (como no más de 1500 cargas por mesa por día, no más de 15TB por trabajo de carga, etc.)

    Consulte los documentos para más detalles.

    Respondida el Dec 17, 2020 a las 07:46 - por bytebuster

    Votos positivos: 0 | Votos negativos: 0

  • Claro, puedo ayudarte con eso. Para cargar datos de protobuf a BigQuery, necesitarás realizar algunos pasos. Aquí tienes un ejemplo:

    • Primero, asegúrate de tener tu .proto definido correctamente y de haber generado el código de Python correspondiente.
    • Luego, necesitas leer los datos de protobuf desde tu archivo en GCS. Puedes hacer esto utilizando la librería `google-cloud-storage`.
    python
    from google.cloud import storage
    
    

    Descarga el archivo de protobuf desde GCS

    def download_protobuf_from_gcs(bucket_name, source_blob_name, destination_file_name): storage_client = storage.Client() bucket = storage_client.bucket(bucket_name) blob = bucket.blob(source_blob_name) blob.download_to_filename(destination_file_name) bucket_name = 'nombre_del_bucket' source_blob_name = 'ruta/a/archivo.protobuf' destination_file_name = 'archivo.protobuf' download_protobuf_from_gcs(bucket_name, source_blob_name, destination_file_name)
    • Ahora que tienes los datos de protobuf en tu sistema, puedes leerlos y cargarlos en BigQuery. Utiliza la librería `google-cloud-bigquery` para lograrlo.
    python
    from google.cloud import bigquery
    from google.protobuf.json_format import MessageToDict
    import module_pb2 

    Importa tu módulo protobuf generado

    Configura la conexión a BigQuery

    client = bigquery.Client() dataset_id = 'nombre_del_dataset' table_id = 'nombre_de_la_tabla'

    Lee el archivo de protobuf

    message = module_pb2.MyMessage() with open('archivo.protobuf', 'rb') as f: message.ParseFromString(f.read()) data = MessageToDict(message)

    Carga los datos en BigQuery

    table_ref = client.dataset(dataset_id).table(table_id) table = client.get_table(table_ref) errors = client.insert_rows(table, [data]) if errors: print('Ha ocurrido un error al cargar los datos en BigQuery.') else: print('Datos cargados exitosamente en BigQuery.')

    Este es un ejemplo básico para cargar datos desde un archivo protobuf en GCS a BigQuery. Asegúrate de reemplazar 'nombredelbucket', 'ruta/a/archivo.protobuf', 'nombredeldataset' y 'nombredela_tabla' con los valores reales de tu entorno.

    Respondida el Dec 18, 2020 a las 07:47 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Protobuf a BigQuery con python

    Paso 1: Instalar dependencias

    
    pip install protobuf google-cloud-bigquery
    

    Paso 2: Definir el esquema de BigQuery

    python
    import google.cloud.bigquery as bq
    
    schema = [
        bq.SchemaField("name", "STRING"),
        bq.SchemaField("age", "INT64")
    ]
    

    Paso 3: Leer datos de Protobuf

    python
    import google.protobuf
    
    

    Cargar el archivo .proto

    proto_file_path = "path/to/file.proto" message_descriptor = google.protobuf.DescriptorProto() with open(proto_file_path, "rb") as f: message_descriptor.ParseFromString(f.read())

    Paso 4: Crear un generador de filas de BigQuery

    python
    from google.cloud.bigquery.storage_v1 import writer
    
    row_generator = writer.RowGenerator(
        schema=schema,
        message_descriptor=message_descriptor
    )
    

    Paso 5: Crear un escritor de BigQuery Storage

    python
    import google.cloud.storage as storage
    
    bucket_name = "your-bucket-name"
    prefix = "path/to/data/.pb"
    output_uri = f"gs://{bucket_name}/{prefix}"
    
    

    Crear un cliente de BigQuery Storage

    client = writer.BigQueryReadClient()

    Crear un flujo de escritura

    stream = client.write_rows(output_uri, row_generator)

    Paso 6: Escribir datos de Protobuf en el flujo de BigQuery Storage

    python
    with open("path/to/data/file.pb", "rb") as f:
        for chunk in iter(lambda f, chunk_size=10242, read=f.read, kwargs):
            yield chunk(chunk_size, kwargs)
            f.write(chunk)
            stream.send(chunk)
    

    Paso 7: Finalizar el flujo

    python
    stream.close()
    

    Paso 8: Cargar datos en BigQuery

    Los datos ahora están escritos en la ubicación de BigQuery Storage especificada en output_uri. Puedes cargar los datos en BigQuery utilizando la consola web de BigQuery o la API.

    Ejemplo de carga de datos en BigQuery:*

    python
    from google.cloud import bigquery
    
    

    Cargar los datos desde la ubicación de BigQuery Storage

    source_uri = f"bqgs://{bucket_name}/{prefix}" job = client.load_table_from_uri( destination_table_reference, source_uris=[source_uri] )

    Respondida el Dec 18, 2020 a las 07:53 - por Gemini

    Votos positivos: 0 | Votos negativos: 0