Snowflake数据源

DataWorks数据集成支持读写Snowflake。本文为您介绍DataWorksSnowflake数据同步能力支持情况。

使用限制

Snowflake Reader、Writer使用的驱动版本是snowflake-jdbc:3.20.0,驱动能力详情请参见SnowFlake JDBC驱动程序发布说明

支持的字段类型

Snowflake ReaderSnowflake Writer支持大部分通用的关系数据库数据类型,例如数字、字符等。但也存在部分类型未被支持的情况,请注意检查您的数据类型,根据具体的数据库进行选择。

字段类型

离线读(Snowflake Reader)

离线写(Snowflake Writer)

NUMBER

支持

支持

DECIMAL

支持

支持

NUMERIC

支持

支持

INT

支持

支持

INTEGER

支持

支持

BIGINT

支持

支持

SMALLINT

支持

支持

TINYINT

支持

支持

BYTEINT

支持

支持

FLOAT

支持

支持

FLOAT4

支持

支持

FLOAT8

支持

支持

DOUBLE

支持

支持

DOUBLE PRECISION

支持

支持

CHAR

支持

支持

VARCHAR

支持

支持

STRING

支持

支持

TEXT

支持

支持

BINARY

支持

支持

VARBINARY

支持

支持

BOOLEAN

支持

支持

DATE

支持

支持

TIME

支持

支持

TIMESTAMP

支持

支持

TIMESTAMP_NTZ

支持

支持

TIMESTAMP_LTZ

支持

支持

TIMESTAMP_TZ

不支持

支持

OBJECT

不支持

不支持

ARRAY

不支持

不支持

VARIANT

不支持

不支持

GEOGRAPHY

不支持

不支持

GEOMETRY

不支持

不支持

VECTOR

不支持

不支持

FILE

不支持

不支持

创建数据源

在进行数据同步任务开发时,您需要在DataWorks上创建一个对应的数据源,操作流程请参见数据源管理详细的配置参数解释可在配置界面查看对应参数的文案提示

数据同步任务开发

数据同步任务的配置入口和通用配置流程可参见下文的配置指导。

单表离线同步任务配置指导

附录:脚本Demo与参数说明

离线任务脚本配置方式

如果使用脚本模式配置单表离线任务,您需要按照统一的脚本格式要求,在任务脚本中编写相应的参数,详情请参见脚本模式配置。以下为您介绍脚本模式下数据源的参数配置详情。

Reader脚本Demo

{
    "transform": false,
    "type": "job",
    "version": "2.0",
    "steps": [
        {
            "stepType": "snowflake",
            "parameter": {
                "schema": "PUBLIC",
                "envType": 0,
                "datasource": "snowflake_datasource",
                "column": [
                    "ID",
                    "NAME"
                ],
                "where": "",
                "table": "table"
            },
            "name": "Reader",
            "category": "reader"
        },
        {
            "stepType": "stream",
            "parameter": {
                "print": true
            },
            "name": "Writer",
            "category": "writer"
        }
    ],
    "setting": {
        "errorLimit": {
            "record": "0"
        },
        "speed": {
            "throttle": false,
            "concurrent": 2
        }
    },
    "order": {
        "hops": [
            {
                "from": "Reader",
                "to": "Writer"
            }
        ]
    }
}

Reader脚本参数

参数

描述

是否必选

默认值

datasource

输入Snowflake数据源名称。

table

选取的需要同步的表名称。

schema

要读取的Snowflake表所在的Schema。

column

所配置的表中需要同步的列名集合,使用JSON的数组描述字段信息,默认使用所有列配置,例如[ * ]:

  • 支持列裁剪,即可以挑选部分列进行导出。

  • 支持列换序,即列可以不按照表schema信息顺序进行导出。

  • 支持常量配置,您需要按照JSON格式["id","1", "'bazhen.csy'", "null", "to_char(a + 1)", "2.3" , "true"]

    • id为普通列名。

    • 1为整型数字常量。

    • 'bazhen.csy'为字符串常量。

    • null为空指针。

    • to_char(a + 1)为函数表达式。

    • 2.3为浮点数。

    • true为布尔值。

  • column必须显示您指定同步的列集合,不允许为空。

splitFactor

切分因子,可以配置同步数据的切分份数。如果配置了多并发,会按照并发数 * splitFactor份来切分。例如,并发数=5,splitFactor=5,则会按照5*5=25份来切分,在5个并发线程上执行。

说明

建议取值范围:1~100,过大会导致内存溢出。

splitPk

Snowflake Reader进行数据抽取时,如果指定splitPk,表示您希望使用splitPk代表的字段进行数据分片。数据同步系统因此会启动并发任务进行数据同步,这样可以提高数据同步的效率。

  • 推荐使用表主键设置splitPk,因为表主键通常情况下比较均匀,因此切分出来的分片也不容易出现数据热点。

  • 目前splitPk仅支持整型数据切分,不支持字符串、浮点、日期等其他类型 。如果您指定其他非支持类型,SnowFlake Reader将报错。

where

筛选条件,SnowFlake Reader根据指定的columntablewhere条件拼接SQL,并根据该SQL进行数据抽取。例如在做测试时,可以将where条件指定为limit 10。

在实际业务场景中,通常会选择当天的数据进行同步,可以将where条件指定为gmt_create>${bizdate}

  • where条件可以有效地进行业务增量同步。

  • where条件不配置或为空时,则视作全表同步数据。

fetchSize

该配置项定义了插件和数据库服务器端每次批量数据获取条数,该值决定了数据集成和服务器端的网络交互次数,能够提升数据抽取性能。

说明

fetchSize值过大(大于2048)可能造成数据同步进程OOM。

1024

Writer脚本Demo

{
    "transform": false,
    "type": "job",
    "version": "2.0",
    "steps": [
        { 
            "stepType":"stream",
            "parameter":{},
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType": "snowflake",
            "parameter": {
                "schema": "PUBLIC",
                "envType": 0,
                "datasource": "snowflake_datasource",
                "column": [
                    "ID",
                    "NAME"
                ],
                "table": "TABLE"
            },
            "name": "Writer",
            "category": "writer"
        }
    ],
    "setting": {
        "executeMode": null,
        "errorLimit": {
            "record": "0"
        },
        "speed": {
            "concurrent": 2,
            "throttle": false
        }
    },
    "order": {
        "hops": []
    }
}

Writer脚本参数

参数

描述

是否必选

默认值

datasource

输入Snowflake数据源名称。

table

选取的需要同步的表名称。

schema

要写入的Snowflake表所在的Schema。

column

目标表需要写入数据的字段,字段之间用英文逗号分隔。例如"column":["id","name","age"]。如果要依次写入全部列,使用*表示,例如"column":["*"]

batchSize

一次性批量提交的记录数大小,该值可以极大减少数据集成与Snowflake的网络交互次数,并提升整体吞吐量。但是该值设置过大可能会造成数据集成运行进程OOM情况。

1024