【问题标题】:Create Table with default nextVal from sequence in Snowflake从 Snowflake 中的序列创建具有默认 nextVal 的表
【发布时间】:2021-10-24 20:50:21
【问题描述】:

我目前正在尝试将 postgres 查询转换为与 Snowflake 兼容并以相同的方式工作。

Postgres 

CREATE SEQUENCE IF NOT EXISTS public.etl_jobs_delta_loading_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;

CREATE TABLE IF NOT EXISTS public.etl_jobs_delta_loading
(
    id INTEGER DEFAULT nextval('public.etl_jobs_delta_loading_id_seq'::regclass) NOT NULL,
    job_name VARCHAR(500) NOT NULL,
    loaded_until TIMESTAMP,
    etl_execution_time TIMESTAMP,
    execution_status VARCHAR(30)
);

我将序列翻译为 Snowflake,但在尝试获取雪花中的 nextVal 时不断出错。

Snowflake

CREATE OR REPLACE SEQUENCE etl_jobs_delta_loading_id_seq
    START = 1
    INCREMENT = 1

CREATE TABLE IF NOT EXISTS public.etl_jobs_delta_loading
(
    id INTEGER DEFAULT nextval('public.etl_jobs_delta_loading_id_seq'::regclass) NOT NULL, -- statement that needs to be converted
    job_name VARCHAR(500) NOT NULL,
    loaded_until TIMESTAMP,
    etl_execution_time TIMESTAMP,
    execution_status VARCHAR(30)
);

我尝试了各种方法来创建 etl_jobs_delta_loading 表,但直到现在都没有运气。关于如何在雪花中实现这一点的任何想法?

【问题讨论】:

    标签: postgresql snowflake-cloud-data-platform snowflake-schema


    【解决方案1】:

    从序列中获取值的正确语法是<seq_name>.NEXTVAL:

    CREATE OR REPLACE SEQUENCE PUBLIC.etl_jobs_delta_loading_id_seq
        START = 1
        INCREMENT = 1;
    
    CREATE TABLE IF NOT EXISTS public.etl_jobs_delta_loading
    (
        id INTEGER DEFAULT public.etl_jobs_delta_loading_id_seq.NEXTVAL NOT NULL, 
        job_name VARCHAR(500) NOT NULL,
        loaded_until TIMESTAMP,
        etl_execution_time TIMESTAMP,
        execution_status VARCHAR(30)
    );
    

    相关:Sequences as Expressions


    或者使用 IDENTITY/AUTOINCREMENT 属性:

    CREATE OR REPLACE TABLE public.etl_jobs_delta_loading
    (
        id INTEGER NOT NULL IDENTITY(1,1), 
        job_name VARCHAR(500) NOT NULL,
        loaded_until TIMESTAMP,
        etl_execution_time TIMESTAMP,
        execution_status VARCHAR(30)
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多