У меня есть входная таблица в BigQuery, в которой все поля хранятся в виде строк. Например, таблица выглядит так:
name dob age info
"tom" "11/27/2000" "45" "['one', 'two']"
И в запросе я сейчас делаю следующее
WITH
table AS (
SELECT
"tom" AS name,
"11/27/2000" AS dob,
"45" AS age,
"['one', 'two']" AS info )
SELECT
EXTRACT( year from PARSE_DATE('%m/%d/%Y', dob)) birth_year,
ANY_value(PARSE_DATE('%m/%d/%Y', dob)) bod,
ANY_VALUE(name) example_name,
ANY_VALUE(SAFE_CAST(age AS INT64)) AS age
FROM
table
GROUP BY
EXTRACT( year from PARSE_DATE('%m/%d/%Y', dob))
Кроме того, я попытался выполнить очень простую операцию group by
, приводящую элемент к строке, а не нет, и я не увидел никакого снижения производительности в наборе данных ~ 1M строк (на самом деле, в данном конкретном случае, приведение чтобы строка была быстрее):
![enter image description here](https://i.stack.imgur.com/Pj3jf.png)
Помимо плохой практики "хранить" эту таблицу, состоящую из всех строк, и не преобразовывать ее в ее правильный тип, с какими ограничениями (функциональными или с точки зрения производительности) я столкнусь, сохраняя все таблицы -строка вместо того, чтобы хранить его как свой собственный тип. Я знаю, что будет небольшое увеличение размера из-за хранения строк вместо number / date / bool / и т. Д., Но с какими основными ограничениями или сбоями в производительности я столкнусь, если буду так держать?
Вне головы, единственные ограничения, которые я вижу:
- Запросы станут более сложными (хотя на самом деле не имеет значения, если использовать построитель запросов).
- Немного сложнее извлечь не строковые элементы из полей массива.
- Вставка данных становится немного сложнее (например, необходимо следить за форматом даты).
Но все это кажется очень маленькими предметами, которые можно обойти. Существуют ли другие, более «серьезные» причины, по которым использование всех строковых полей было бы огромным ограничением, либо в ограничении возможностей запросов, либо в огромных падениях производительности в различных случаях?