Команда копирования таблицы BQ изменяет режим столбца с REQUIRED на NULLABLE

Я выполнил команду ниже, чтобы создать новую таблицу из существующей таблицы. Проблема в том, что BQ создает эту новую таблицу, но меняет режим столбцов REQUIRED на NULLABLE.

create table `project_id.dataset.new_table_name` as 
select * replace(
    array(select as struct person.* except(add) from t.person) as person
  )
from `project_id.dataset.table_name` t;

Ожидается, что режим столбца не изменится.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Атрибут NOT NULL таблицы column_schema не распространяется через запросы к таблице. Если таблица T содержит столбец, объявленный как x INT64 NOT NULL, например, CREATE TABLE dataset.newtable AS SELECT x FROM T создает таблицу с именем dataset.newtable, в которой x имеет значение NULL.

Итак, вам лучше рассмотреть явное определение схемы.

CREATE OR REPLACE TABLE `project_id.dataset.table_name` (
  Id STRING,
  Person ARRAY<STRUCT<
    Name STRING NOT NULL,
    Add STRUCT<line STRING>
  >>
) AS
SELECT 'id', [('John', STRUCT('aaa'))];

CREATE OR REPLACE TABLE `project_id.dataset.new_table_name` (
  Id STRING,
  Person ARRAY<STRUCT<
    Name STRING NOT NULL
  >>
) AS
SELECT * REPLACE (ARRAY(SELECT AS STRUCT Person.* EXCEPT(add) FROM t.Person) AS Person)
  FROM `project_id.dataset.table_name` t;

Другие вопросы по теме