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