Bigquery Scripting en un flujo de aire de gran operador

¿Es posible hacer una guionería en el flujo de aire BigQueryOperator (airflow 1.10.12)? ¿Alguien consigue hacerlo? Traté de calmar así:

test = BigQueryOperator(
task_id='test',
sql="""DECLARE aaa STRING;
SET aaa = 'data';
CREATE OR REPLACE TABLE `project-id.dataset-id.TEST_DDL` as select aaa as TEST;""",
use_legacy_sql = False,
create_disposition=False,
write_disposition=False,
schema_update_options=False,
location='EU')

Pero todo lo que consigo es un 'No encontrado: Dataset no fue encontrado en la ubicación de EE.UU. en [3:9] '

Pregunta hecha hace 3 años, 4 meses, 28 días - Por quantumcoder403a


3 Respuestas:

  • En realidad encontré el problema y es relativo a su gran operador. En realidad cuando se escriben hay ni tablas referenciadas ni tabla de destino en el trabajo de inserción bigquery. En ese caso, bigquery establece la ubicación de trabajo en EE.UU. por defecto. En mi caso, ya que mis conjuntos de datos están en la UE fracasa el trabajo. Y hay un parámetro de ubicación en el operador de bigquery, pero es mal pasado por el operador en el objeto de configuración del trabajo en lugar de en el objeto de referencia de trabajo. Lo que lo hizo inútil. La cuestión se corrige en el flujo aéreo 2.

    Respondida el Dec 18, 2020 a las 16:51 - por gitguru

    Votos positivos: 0 | Votos negativos: 0

  • El error que estás recibiendo "Dataset no fue encontrado en la ubicación de EE.UU." sugiere que el problema radica en la ubicación especificada para el dataset en tu script de BigQuery.

    En BigQuery, si estás trabajando en un proyecto específico, no necesitas especificar la ubicación del dataset en la consulta SQL, ya que el proyecto predeterminado ya está configurado con la ubicación en la que se crean los datasets.

    Por lo tanto, para corregir tu script, puedes intentar eliminar la ubicación 'EU' y simplemente referenciar el dataset en el formato project-id.dataset-id sin especificar la ubicación en la consulta SQL.

    Aquí está la parte del script actualizada sin la ubicación especificada:

    python test = BigQueryOperator( task_id='test', sql=""" DECLARE aaa STRING; SET aaa = 'data'; CREATE OR REPLACE TABLE `project-id.dataset-id.TEST_DDL` AS SELECT aaa AS TEST; """, use_legacy_sql=False, create_disposition=False, write_disposition=False, schema_update_options=False )

    Con esto, deberías poder ejecutar tu script sin el error de 'Dataset no fue encontrado en la ubicación de EE.UU.'. Asegúrate de reemplazar project-id.dataset-id con los detalles correctos de tu proyecto y dataset en BigQuery.

    Respondida el Dec 19, 2020 a las 16:50 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Sí, es posible utilizar sentencias DDL en un operador BigQuery en Airflow. Sin embargo, hay algunos matices que debes tener en cuenta:

    • Ubicación del conjunto de datos: El error que estás recibiendo indica que estás intentando crear una tabla en un conjunto de datos que no existe en la ubicación especificada. Asegúrate de que el conjunto de datos `dataset-id` exista en la ubicación `EU`.
    • Sintaxis de DDL: La sintaxis de DDL que estás utilizando para crear la tabla es válida en BigQuery. Sin embargo, es posible que debas encerrar los identificadores entre comillas invertidas (`) si contienen caracteres especiales o palabras clave reservadas.
    • Opciones de disposición: Las opciones `create_disposition` y `write_disposition` solo son relevantes para las operaciones de inserción y actualización. Para las sentencias DDL, debes establecerlas en `False`.
    • Opciones de actualización de esquema: La opción `schema_update_options` solo es relevante para las operaciones de actualización de tabla. Para las sentencias DDL, debes establecerla en `False`.

    Aquí tienes un ejemplo modificado de tu código que debería funcionar:

    python test = BigQueryOperator( task_id='test', sql=""" DECLARE aaa STRING; SET aaa = 'data'; CREATE OR REPLACE TABLE `project-id.dataset-id.TEST_DDL` as select aaa as TEST;""", use_legacy_sql=False, create_disposition='CREATE_NEVER', write_disposition='WRITE_EMPTY', schema_update_options=[], location='EU' )

    Espero que esto resuelva el problema. Si aún tienes problemas, proporciona el código y el registro de errores completos para una depuración adicional.

    Respondida el Dec 19, 2020 a las 17:01 - por Gemini

    Votos positivos: 0 | Votos negativos: 0