Ошибка «Неожиданный строковый литерал» с обратным трюком в SQL-запросе в Python bigquery API - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь перебрать таблицы в моем наборе данных BigQuery, выполнить запрос SQL и экспортировать результаты таблицы. Я получаю сообщение об ошибке при попытке включить имя таблицы в цикл for.

for i in range(0, 3):
  dataset_id = 'test_dataset'
  tabelname = "test"+ str(i) 
  tableOutName = tabelname + "_cleaned"

  job_config = bigquery.QueryJobConfig()

  # Set the destination table
  table_ref = client.dataset(dataset_id).table(tableOutName)
  job_config.destination = table_ref
  sql = "\"\"\"" + " SELECT * FROM " + "`my-bucket-name.{}.{}` ".format(dataset_id, tabelname) +  "WHERE SAFE.ST_GeogFromText(WKT) IS NOT NULL " +"\"\"\""

  # Start the query, passing in the extra configuration.
  query_job = client.query(
      sql,
      location='EU',
      job_config=job_config)  # API request - starts the query

  query_job.result()  # Waits for the query to finish
  print('Query results loaded to table {}'.format(table_ref.path))

1 Ответ

0 голосов
/ 14 июня 2019

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

Следовательно, необходимо изменить следующую строку кода:

  sql = "\"\"\"" + " SELECT * FROM " + "`my-bucket-name.{}.{}` ".format(dataset_id, tabelname) +  "WHERE SAFE.ST_GeogFromText(WKT) IS NOT NULL " +"\"\"\""

Документация использует это следующим образом:

sql = """
SELECT corpus
FROM `bigquery-public-data.samples.shakespeare`
GROUP BY corpus;
"""
...