#sql #google-bigquery
#sql #google-bigquery
Вопрос:
У меня около 30 целых столбцов, и я хотел бы преобразовать все существующие целочисленные столбцы в тип данных с плавающей запятой.
На данный момент мне удалось преобразовать только один столбец за раз.
Я пробовал этот код, но не смог добиться успеха.
select CAST(sales,duration AS float) FROM tableName
Возможно ли это сделать в BigQuery?
Комментарии:
1. По одному приведению на столбец! Но почему вы храните данные в целочисленных столбцах, если хотите отображать float?
2. я загрузил данные, используя
--autodetect
командную строку in bq. Он загрузил некоторые столбцы как целые числа. Итак, я хочу преобразовать их все в float
Ответ №1:
Возможно ли это сделать в bigquery?
Да, вы можете использовать команду 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
command для получения всех столбцов (вы можете использовать оболочку BigQuery, если у вас нет bq
локальной установки)
bq show --format=prettyjson --schema datasetId.tableId
Это выведет все ваши столбцы в этом формате:
{
"mode": "NULLABLE",
"name": "ProvisionedThroughput",
"type": "STRING"
}
Вы можете использовать этот вывод и использовать любой редактор, который вам нравится, чтобы создать правильный синтаксис для CREATE OR REPLACE
Вариант 2:
Если вы подписаны на бета-версию BigQuery INFORMATION_SCHEMA, вы можете просто выбрать из 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'), ')');
Который возвращает следующий массив, готовый к использованию:
Комментарии:
1. Спасибо, но у меня есть 200 целых столбцов, которые нужно преобразовать в float, и трудно указать все столбцы выше query…is есть какой-нибудь обходной путь?
2. @NikhilBOORLA Я редактирую свой ответ, чтобы помочь вам преодолеть проблему с 200 столбцами… Я вижу, что они быстро растут по сравнению с вашими исходными 30 🙂
3. @NikhilBOORLA Если мой ответ был полезен, пожалуйста, подумайте о том, чтобы принять его, вот как: meta.stackexchange.com/questions/5234 /…