Compruebe si la consulta de bigquery fue exitoso o no en pitón
Estoy tratando de probar si el resultado de mi creación o reemplazar la consulta en pitón fue exitoso o no. He escrito código como el siguiente
PROJECT = project_id
DATASET = dataset
FINAL_TABLE = final_table
MAIN_TABLE = main_table
main_query = \
f'CREATE OR REPLACE TABLE `{PROJECT}.{DATASET}.{FINAL_TABLE}` AS \
(SELECT * FROM `{PROJECT}.{DATASET}.{MAIN_TABLE}` WHERE region="us")'
result = BQ.query(main_query)
if result.errors():
raise Exception('Table was not successfullly refreshed in bigQuery')
Sin embargo el resultado.errores() sintaxis no funciona correctamente. ¿Cuál es la sintaxis para intentar lograr esto?
Pregunta hecha hace 3 años, 5 meses, 0 días - Por nasean
3 Respuestas:
-
El
result.errors()
la sintaxis no funciona porqueresult.errors
es en realidad un atributo delQueryJob
y no un método. Es una lista de los errores que pueden haber ocurrido. Sin embargo, si no ocurren erroresresult.errors
esNone
(Véase también:errors
Referencia de API).Así que al eliminar los paréntesis, su código debe funcionar:
PROJECT = project_id DATASET = dataset FINAL_TABLE = final_table MAIN_TABLE = main_table main_query = \ f'CREATE OR REPLACE TABLE `{PROJECT}.{DATASET}.{FINAL_TABLE}` AS \ (SELECT * FROM `{PROJECT}.{DATASET}.{MAIN_TABLE}` WHERE region="us")' result = BQ.query(main_query) if result.errors: raise Exception('Table was not successfullly refreshed in bigQuery')
Respondida el Dec 17, 2020 a las 11:57 - por coderchampion
Votos positivos: 0 | Votos negativos: 0 -
Para comprobar si la consulta en BigQuery fue exitosa o no, puedes verificar si la propiedad
errors
del objetoBQJob
está vacía. Aquí hay un ejemplo de cómo verificar si la consulta fue exitosa:```python from google.cloud import bigquery
Crear una instancia de cliente de BigQuery
client = bigquery.Client()Definir proyecto, conjunto de datos y tablas
PROJECT = project_id DATASET = dataset FINAL_TABLE = final_table MAIN_TABLE = main_table main_query = \ f'CREATE OR REPLACE TABLE `{PROJECT}.{DATASET}.{FINAL_TABLE}` AS \ (SELECT * FROM `{PROJECT}.{DATASET}.{MAIN_TABLE}` WHERE region="us")'Ejecutar la consulta
job = client.query(main_query) job.result()Esperar a que la consulta termine
Comprobar si hubo errores en la consulta
if job.errors: raise Exception('Table was not successfully refreshed in BigQuery') ```En este código,
job.errors
contiene una lista de errores si la consulta falló. Si la lista está vacía, significa que la consulta se ejecutó correctamente. Puedes manejar los errores según sea necesario en la excepción que lanzas.Respondida el Dec 18, 2020 a las 11:56 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Para comprobar si una consulta de BigQuery se realizó correctamente en Python, puedes utilizar el método
result().errors()
. Este método devuelve una lista de errores que ocurrieron durante la consulta. Si la lista está vacía, significa que la consulta se realizó correctamente.Tu código actual tiene un error menor: estás intentando acceder al método
errors()
de la variableresult
, que es un objeto de tipogoogle.cloud.bigquery.job.QueryJob
. Sin embargo, el métodoerrors()
solo está disponible en objetos de tipogoogle.cloud.bigquery.table.RowIterator
.Para solucionar el problema, puedes utilizar el método
result().destination()
para obtener un objeto de tipogoogle.cloud.bigquery.table.RowIterator
y luego utilizar el métodoerrors()
en ese objeto.Aquí tienes el código actualizado:
python PROJECT = project_id DATASET = dataset FINAL_TABLE = final_table MAIN_TABLE = main_table main_query = \ f'CREATE OR REPLACE TABLE `{PROJECT}.{DATASET}.{FINAL_TABLE}` AS \ (SELECT * FROM `{PROJECT}.{DATASET}.{MAIN_TABLE}` WHERE region="us")' result = BQ.query(main_query) if result.destination().errors(): raise Exception('Table was not successfullly refreshed in bigQuery')
Espero que esto solucione tu problema.
Respondida el Dec 18, 2020 a las 12:00 - por Gemini
Votos positivos: 0 | Votos negativos: 0