Возможно ли сделать это в большом запросе?
Да, вы можете использовать команду DML для изменения структуры вашей таблицы Например:
#standardSQL
CREATE OR REPLACE TABLE mydataset.newtable (
field0 FLOAT64,
field1 FLOAT64,
field2 FLOAT64)
OPTIONS(
description="a table with new FLOAT fields",
labels=[("org_unit", "development")]
)
После того, как вы это сделали, вы можете выбрать из таблицы, не используя cast
Если у вас много столбцов и сложно построить список, у вас есть два варианта, чтобы ускорить это:
опция 1:
используйте команду bq show
, чтобы получить все столбцы (вы можете использовать оболочку BigQuery, если у вас нет bq
установки локально)
bq show --format=prettyjson --schema datasetId.tableId
Это выведет все ваши столбцы в следующем формате:
{
"mode": "NULLABLE",
"name": "ProvisionedThroughput",
"type": "STRING"
}
Вы можете взять этот вывод и использовать любой редактор, который вам нравится, чтобы создать правильный синтаксис для CREATE OR REPLACE
Вариант 2:
Если вы подписаны на BigQuery INFORMATION_SCHEMA beta , вы можете просто выбрать из INFORMATION_SCHEMA все свои поля следующим образом:
WITH ColumnNames AS
(SELECT COLUMN_NAME,
data_type
FROM datasetId.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = "tables" )
SELECT CONCAT(ARRAY_TO_STRING(ARRAY (SELECT CONCAT(COLUMN_NAME, ' ', 'FLOAT64') FROM ColumnNames), ' \n'), ')');
Который возвращает массив в виде следующего готового к использованию:
![enter image description here](https://i.stack.imgur.com/kUOmt.png)