преобразовать все целочисленные столбцы в число с плавающей точкой - PullRequest
0 голосов
/ 15 апреля 2019

У меня около 30 целочисленных столбцов, и я хотел бы преобразовать все существующие целочисленные столбцы в тип данных с плавающей запятой.

На данный момент мне удалось преобразовать только один столбец за раз.

Я пробовал этот код, но не смог.

select CAST(sales,duration AS float) FROM tableName

Возможно ли это сделать в BigQuery?

1 Ответ

2 голосов
/ 15 апреля 2019

Возможно ли сделать это в большом запросе?

Да, вы можете использовать команду 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...