Вставить в таблицу с повторяющимся столбцом записи (рассматриваемый экран)

У меня есть таблица в bigquery со структурой

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

И проблема с отправкой данных в тестовую запись

Пробую вот так вставить:

query = (
   """
   INSERT INTO test.qwe (name, nick, test)  
   VALUES(@name, @nick, @test)
   """
)
hitTimeStamp = int(time.time())
query_params = [
   bigquery.ScalarQueryParameter("name", "STRING", hitTimeStamp),
   bigquery.ArrayQueryParameter("nick", "STRING", ["k","TEST"]),
   bigquery.StructQueryParameter(
      "test",
       bigquery.ArrayQueryParameter("a", "STRING", ["adsfwerf","d"]),
       bigquery.ArrayQueryParameter("b", "STRING", ["asda","sdfds"]),
   ),
]
job_config = bigquery.QueryJobConfig()
job_config.query_parameters = query_params
query_job = client.query(
   query,
   location="US",
   job_config=job_config,
)

Я ожидал, что данные будут вставлены! Пожалуйста ...


person Дмитрий Запорож&    schedule 05.07.2019    source источник


Ответы (1)


Прямо сейчас я вижу пару проблем:

  1. Вы рассматриваете nick как массив, но он определяется как STRING.
  2. Вы рассматриваете test как структуру, содержащую массивы, но NESTED REPEATED на самом деле является массивом, содержащим структуры.

К сожалению, похоже, что используемые вами помощники из библиотеки google-cloud-python некорректно поддерживают создание вывода, необходимого для полей NESTED REPEATED (массив структур). Есть проблема с указанием этого, которая в настоящее время находится в их "To Do "(несмотря на то, что он отмечен как закрытый, не было разрешающая способность).

Это возможно с помощью других библиотек, а также изначально в синтаксисе BigQuery DML, который будет выглядеть примерно так:

INSERT INTO test.qwe (name,nick,test)
VALUES(
  "name value",
  "nick value",
  [
    STRUCT("adsfwerf" AS a,"asda" AS b),
    STRUCT("d" AS a,"sdfds" AS b)
  ]
)

(Обратите внимание, что существует несколько разных синтаксисов для работы с типами ARRAY и STRUCT, но это самый краткий, поэтому я выбрал его здесь.)

Поэтому в качестве обходного пути вы всегда можете создать запрос вне помощников, предоставляемых google-cloud-python, а затем запустить его. Вы также можете затронуть эту тему и посмотреть, могут ли сопровождающие проекта предоставить какие-либо другие обходные пути или помочь добавить эту функциональность - или вам может потребоваться поискать другую библиотеку, которая полностью поддерживает функции, связанные с NESTED REPEATED полями.

person justbeez    schedule 05.07.2019