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 porque result.errors es en realidad un atributo del QueryJob y no un método. Es una lista de los errores que pueden haber ocurrido. Sin embargo, si no ocurren errores result.errors es None (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 objeto BQJob 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 variable result, que es un objeto de tipo google.cloud.bigquery.job.QueryJob. Sin embargo, el método errors() solo está disponible en objetos de tipo google.cloud.bigquery.table.RowIterator.

    Para solucionar el problema, puedes utilizar el método result().destination() para obtener un objeto de tipo google.cloud.bigquery.table.RowIterator y luego utilizar el método errors() 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