проблема с автоматически созданным именем поля bigquery, содержащим «.»

#sql #database #google-bigquery #etl #quickbooks-online

#sql #База данных #google-bigquery #etl #quickbooks-онлайн

Вопрос:

Я использовал простой инструмент ETL для импорта данных QuickBooks в Google BigQuery. Отлично! Единственным заметным ограничением на этом шаге является то, что я не могу выполнить какой-либо перевод… больше похоже на инструмент EL.

Тем не менее, теперь я хочу запросить импортированную таблицу. Это вообще не проблема для правильно названных полей в BigQuery (например txndate ). Однако некоторые поля имеют формат abc.xyz (например, deposittoaccountref.value ) и не могут быть запрошены. «.» в имени, по-видимому, сбивает с толку BigQuery.

Если я дамп всей таблицы, я увижу поля имен «.» и связанные с ними значения.

Однако я не могу создать пользовательский запрос к этим полям. Они не отображаются в автоматически сгенерированной схеме, которая позволяет перетаскивать имена полей в запрос.

Кроме того, я попытался вручную ввести имя поля и получил следующее сообщение об ошибке: Missing column alias. Any expression in a SELECT statement that is not a column from the original data source must be followed by an alias, for example: AS my_alias .

Я пробовал заключать имя поля в кавычки и заключать имя поля в квадратные скобки, но они по-прежнему выдают ту же ошибку.

Я вернулся к документации QB API, и это действительно то, как Intuit помечает поля.

Наконец, пока я могу запрашивать эти поля вообще, я могу переименовать их, чтобы устранить "." проблему.

Пожалуйста, сообщите и спасибо!

Ответ №1:

хорошо, я решил это сам.

Способ исправить это в редакторе запросов bigquery — вручную ввести имя поля (т. Е. Недоступное в автоматически сгенерированной схеме) и заключить имя поля в круглые скобки.

например, deposittoaccountref.value становится (deposittoaccountref.value)

Теперь столбец в результирующем наборе будет помечен как «значение», поэтому вы можете захотеть переименовать поле данных во что-то без «.». Например, я взял исходное deposittoaccountref.value и изменил его на (deposittoaccountref.value) как deposittoaccountref_value

Надеюсь, это поможет кому-то еще в будущем!

Ответ №2:

приведенный выше ответ работает, когда в имени есть одна точка, как в примере.

однако, если их несколько, например, «строка.значение.сумма» тогда трюк с круглыми скобками не работает

я пытался вложить скобку по-разному, но безрезультатно, например, (строка.значение.сумма) = ошибка ошибка, ((строка.значение).сумма) = ошибка, (строка.(значение.сумма)) = ошибка