Такое ощущение, что в Snowflake сами не знают что умеет их база.
Недавно выяснилось, что при создании таблиц поддерживается описание типов из ORACLE:
VARCHAR2(100 BYTE),
NVARCHAR2(80)
В документации, конечно, тишина.
Сейчас понадобилось сделать демку с использованием MASKING POLICY. Решил освежить знания по документации. Листаю список ограничений: ... не применяется к виртуальным колонкам ...
WAT? Виртуальные колонки? Откуда в Snowflake виртуальные колонки?
Есть что-нибудь в документации? Есть, но про EXTERNAL TABLE.
А давайте попробуем...
create table vc_test (
key number,
check_sum number as HASH(key)
);
insert into vc_test(key) values (1);
select * from vc_test;
-- 1,-4730168494964875235
oO
Работает!
Так, абажжи...
create table vc_test2(
key number,
check_sum number as (SELECT key FROM vc_test) DEFAULT 1 NOT NULL
);
insert into vc_test2(key) values (1);
И это работает!
А ну-ка...
select * from vc_test2;
-- [42000][1003] SQL compilation error: syntax error line 1 at position 1 unexpected 'SELECT'. syntax error line 1 at position 31 unexpected 'GENERATOR'.
Чивооо? GENERATOR?
SELECT GET_DDL('table', 'VC_TEST2');
-- result:
create or replace TABLE VC_TEST2 (
KEY NUMBER(38,0),
CHECK_SUM NUMBER(38,0) AS ((SELECT 1 AS "KEY" FROM TABLE (GENERATOR)ROWCOUNT => 1, rowCount => 1) GENERATOR)) NOT NULL DEFAULT 1
);Directed by Frank Slootman
Тейкэвей:
- в snowflake существуют виртуальные колонки для обычных таблиц
- при объявлении засунуть в них можно что угодно, но работать будет не все :)
- значения в колонках не мемоизируются
- с виртуальными колонками многое что нельзя, но несмотря на предыдущий пункт, кластеризацию все-таки можно