Получаю ошибку «‘запрос’ является строкой; хочу диктовать» при выполнении облачного рабочего процесса в облаке Google

# #google-bigquery #google-workflows

Вопрос:

Я следил за этой очень полезной статьей Мартона https://martonkodok.medium.com/automate-the-execution-of-bigquery-queries-with-cloud-workflows-9fffe0557dbb для автоматизации выполнения больших запросов с помощью облачного рабочего процесса, а также другой статьи https://medium.com/codeshake/build-a-serverless-bigquery-ingestion-pipeline-using-cloud-workflows-f893f6b701ee.

Я смог создать рабочий процесс с помощью простого sql-запроса. Однако при выполнении процедуры возникает ошибка, как показано ниже.

 'query' is string; want dict
in step "InvokeProdcedure", routine "main", line: 9
{
  "message": "'query' is string; want dict",
  "tags": [
    "TypeError"
  ]
}
 

Ниже приведен очень простой код, в котором я вызываю процедуру.

 # This is a sample workflow to test or replace with your source code.
#
# This workflow returns a list of Wikipedia articles related to a search term.
# The search term is retrieved from a Cloud Function that returns the current day of the week
# (in GMT), unless a search term is given as input (e.g. {"searchTerm": "Monday"}).
main:
    steps:
    - InvokeProdcedure:
        call: googleapis.bigquery.v2.jobs.query
        args:
            projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
            query:  >
                  DECLARE source_dataset_name STRING DEFAULT NULL;
                  DECLARE source_table_name STRING DEFAULT NULL;
                  DECLARE destination_dataset_name STRING DEFAULT NULL;
                  DECLARE destination_table_name STRING DEFAULT NULL;
                  DECLARE recordstamp_column_name STRING DEFAULT NULL;
                  DECLARE flag_column_name STRING DEFAULT NULL;
                  DECLARE is_deleted_column_name STRING DEFAULT NULL;
                  DECLARE pk_colmun_name_list ARRAY<STRING> DEFAULT NULL;
                  CALL `project.dataset.procedure_name`(*Values passed for all variables above)
        result: queryResult
 

Что это я здесь делаю не так? Разве это не правильный способ вызова процедуры в облачном рабочем процессе?

Ответ №1:

Я смог это исправить. Произошла синтаксическая ошибка. тело отсутствовало в моем коде. Пожалуйста, ознакомьтесь с приведенной ниже документацией Google.

введите описание изображения здесь