Разделите строки BigQuery REGEXP_EXTRACT в скрипте Google Cloud Build YAML

У меня сложный запрос, который создает представление в консоли BigQuery. Я упростил это до следующего, чтобы проиллюстрировать проблему

SELECT
REGEXP_EXTRACT(FIELD1,  r"[\d]*") as F1,
REGEXP_REPLACE(FIELD2, r"\'", "") AS F2,
FROM `project.mydataset.mytable`

Теперь я пытаюсь автоматизировать создание представления с помощью сборки облака. Я не могу разобраться, как разделить строки внутри регулярного выражения для работы как с yaml, так и с SQL.

- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: 'bq'
args: [
'mk',
'--use_legacy_sql=false',
'--project_id=${_PROJECT_ID}',
'--expiration=0',
'--view= 
    REGEXP_EXTRACT(FIELD1,  r"[\d]*") as F1 ,
    REGEXP_REPLACE(FIELD2, r"\'", "") AS F2,
    REGEXP_EXTRACT(FIELD3,  r"\[(\d{3,12}).*\]") AS F3
    FROM `project.mydataset.mytable`" 
    '${_TARGET_DATASET}.${_TARGET_VIEW}'
  ]

Я получаю следующую ошибку

Не удалось запустить сборку: не удалось демаршалировать конфигурацию сборки cloudbuild / build-views.yaml: json: невозможно демаршалировать число в значение Go типа string

Я пробовал использовать параметры замены Cloud Build и столько же комбинаций SQL и YAML escape-последовательности, которые я могу придумать, чтобы найти рабочее решение.


person intotecho    schedule 02.07.2020    source источник
comment
Альтернативой является перемещение его в сценарий bash и запуск из него, как упоминается в этом другом сообщении. stackoverflow.com/a/55349768/8210931   -  person Enrique Del Valle    schedule 03.07.2020


Ответы (1)


Как правило, вы хотите использовать блочные скаляры в таких случаях, поскольку они не обрабатывают любые специальные символы внутри них и завершаются отступом.

Я понятия не имею, как предполагается выглядеть команда, но вот кое-что, по крайней мере действительное YAML:

- name: 'gcr.io/cloud-builders/gcloud'
  entrypoint: 'bq'
  args:
  - 'mk'
  - '--use_legacy_sql=false'
  - '--project_id=${_PROJECT_ID}'
  - '--expiration=0'
  - >- # folded block scalar; newlines are folded into spaces
    --view= 
    REGEXP_EXTRACT(FIELD1,  r"[\d]*") as F1,
    REGEXP_REPLACE(FIELD2, r"\'", "") AS F2,
    REGEXP_EXTRACT(FIELD3,  r"\[(\d{3,12}).*\]") AS F3
    FROM `project.mydataset.mytable`" 
    '${_TARGET_DATASET}.${_TARGET_VIEW}'
  - dummy value to show that the scalar ends here

Скаляр для свернутого блока начинается с >, следующий минус указывает YAML не добавлять последний символ новой строки к его значению.

person flyx    schedule 02.07.2020
comment
Спасибо, работает. Я также обнаружил, что отправка задания сборки локально дает лучшую диагностику и позволяет избежать этапа проверки. ›Gcloud builds submit --config = cloudbuild.yaml - person intotecho; 03.07.2020