Azure Blob Storage数据源

更新时间:
复制 MD 格式

Azure Blob Storage数据源为您提供读取和写入文件的能力,您可以使用本数据源,获取Azure Blob Storage中存储的文件,解析并同步至任意目标数据源;也可以将任意来源数据源的数据写入Azure Blob Storage。本文为您介绍DataWorksAzure Blob Storage数据同步的能力支持情况。

使用限制

Azure Blob Storage数据源,支持以下的数据类型。

数据类型

说明

STRING

文本类型。

LONG

整型。

BYTES

字节数组,将读取到的文本内容转为UTF-8编码的字节数组。

BOOL

布尔型。

DOUBLE

浮点型。

DATE

日期时间类型,支持以下日期时间格式:

  • YYYY-MM-dd HH:mm:ss

  • yyyy-MM-dd

  • HH:mm:ss

创建数据源

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

数据同步任务开发

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

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

附录:脚本Demo与参数说明

离线任务脚本配置方式

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

Reader脚本Demo

以下为从 Azure Blob Storage 读取数据的脚本模式配置示例,writer 侧以 stream 占位,实际使用时请替换为目标数据源的配置。

{
  "type": "job",
  "version": "2.0",
  "steps": [
    {
      "stepType": "azureblob",
      "parameter": {
        "datasource": "",
        "object": ["f/z/1.csv"],
        "fileFormat": "csv",
        "encoding": "utf8/gbk/...",
        "fieldDelimiter": ",",
        "useMultiCharDelimiter": true,
        "lineDelimiter": "\n",
        "skipHeader": true,
        "compress": "zip/gzip",
        "column": [
          {
            "index": 0,
            "type": "long"
          },
          {
            "index": 1,
            "type": "boolean"
          },
          {
            "index": 2,
            "type": "double"
          },
          {
            "index": 3,
            "type": "string"
          },
          {
            "index": 4,
            "type": "date"
          }
        ]
      },
      "name": "Reader",
      "category": "reader"
    },
    {
      "stepType": "stream",
      "parameter": {},
      "name": "Writer",
      "category": "writer"
    }
  ],
  "setting": {
    "errorLimit": {
      "record": "0"
    },
    "speed": {
      "concurrent": 1
    }
  },
  "order": {
    "hops": [
      {
        "from": "Reader",
        "to": "Writer"
      }
    ]
  }
}

Reader脚本参数

参数

描述

是否必选

默认值

datasource

数据源名称,脚本模式支持添加数据源,该配置项填写的内容必须和添加的数据源名称保持一致。

fileFormat

源头文件类型。支持csvtextparquetorcjsonjsonl

object

文件路径,当fileFormat取值为csv、text、json、jsonl时使用。

说明

此参数支持*通配符,支持配置为数组。

例如:您需要同步a/b/1.csva/b/2.csv两个文件,可以配置为a/b/*.csv

fileFormat取值为csv、text、json、jsonl时必填。

path

文件路径,当fileFormat取值为parquet、orc时使用。

说明

此参数支持*通配符,支持配置为数组。

例如:您需要同步a/b/1.orca/b/2.orc两个文件,可以配置为a/b/*.orc

fileFormat取值为parquet、orc时必填。

column

读取字段列表,type指定源数据的类型:

  • CSV/TEXT格式:index指定当前列来自于文本第几列(以0开始),value指定常量值。

  • JSON/JSONL格式:使用jsonPath指定JSONPath表达式提取字段,value指定常量值。

默认情况下,您可以全部按照String类型读取数据,配置如下。

column": ["*"]

您可以指定column字段信息,配置如下。

// CSV/TEXT格式
                    "column":    
    {       
        "type": "long",       
        "index": 0 //从Azure Blob Storage文本第一列获取int字段。
    },    
    {       
        "type": "string",       
        "value": "alibaba" //从Azure Blob Storage Reader内部生成alibaba的字符串字段作为当前字段。    
}
// JSON/JSONL格式
"column":    
{       
"name": "id",       
"jsonPath": "$.id",       
"type": "LONG"
},    
{       
"name": "name",       
"jsonPath": "$.user.name",       
"type": "STRING"
},    
{       
"name": "source",       
"value": "azure",       
"type": "STRING"
}
说明

对于您指定的column信息,type必须填写。CSV/TEXT格式下indexvalue二选一;JSON/JSONL格式下jsonPathvalue二选一。

全部按照STRING类型读取。

fieldDelimiter

读取的字段分隔符。

说明
  • Azure Blob Storage Reader在读取数据时,需要指定字段分割符,如果不指定,默认为(,),界面配置中也会默认填写为(,)。

  • 如果分隔符不可见,请填写Unicode编码。例如:\u001b\u007c

,

lineDelimiter

读取的行分隔符。

说明

fileFormat取值为text时,本参数有效。

compress

文本压缩类型,默认不填写(即不压缩)。支持压缩类型为gzipbzip2zip

不压缩

encoding

读取文件的编码配置。

utf-8

nullFormat

文本文件中无法使用标准字符串定义null(空指针),数据同步系统提供nullFormat定义哪些字符串可以表示为null。例如:

  • 配置nullFormat:"null",等同于“可见字符”,如果源头数据是null,则数据同步视作null字段。

  • 配置nullFormat:"\u0001",等同于“不可见字符”,如果源头数据是字符串"\u0001",则数据同步视作null字段。

  • 不写"nullFormat"这个参数,等同于“未配置”,代表来源是什么数据就直接按照什么数据写入目标端,不做任何转换。

skipHeader

CSV格式文件通过skipHeader配置是否读取表头内容。

  • True:同步数据源的时候读取表头内容。

  • False:同步数据源的时候不读取表头内容。

说明

压缩文件模式下不支持skipHeader

false

parquetSchema

Parquet文件格式读取Azure Blob Storage时配置,当且仅当fileFormatparquet时生效,具体表示parquet存储的类型说明。您需要确保填写parquetSchema后,整体配置符合JSON语法。

message MessageType名 {
是否必填, 数据类型, 列名;
......................;
}

parquetSchema的配置格式说明如下:

  • MessageType名:填写名称。

  • 是否必填:required表示非空,optional表示可为空。推荐全部填写optional。

  • 数据类型:Parquet文件支持BOOLEAN、Int32、Int64、Int96、FLOAT、DOUBLE、BINARY(如果是字符串类型,请填BINARY)和fixed_len_byte_array类型。

  • 每行列设置必须以分号结尾,最后一行也要写上分号。

配置示例如下所示。

"parquetSchema": "message m { optional int32 minute_id; optional int32 dsp_id; optional int32 adx_pid; optional int64 req; optional int64 res; optional int64 suc; optional int64 imp; optional double revenue; }"

csvReaderConfig

读取CSV类型文件参数配置为Map类型。读取CSV类型文件使用的CsvReader进行读取,不配置则使用默认值。

maxRetryTimes

文件下载失败时的最大重试次数。

说明
  • 配置0表示关闭该功能。

  • 高级模式,向导模式不支持此参数的配置。

0

retryIntervalSeconds

文件下载失败时重试间隔,单位秒。

说明

高级模式,向导模式不支持此参数的配置。

5

Writer脚本Demo

以下为将数据写入Azure Blob Storage的脚本模式配置示例,reader侧以stream占位,实际使用时请替换为来源数据源的配置。

{
  "type": "job",
  "version": "2.0",
  "steps": [
    {
      "stepType": "stream",
      "parameter": {},
      "name": "Reader",
      "category": "reader"
    },
    {
      "stepType": "azureblob",
      "parameter": {
        "datasource": "",
        "fileFormat": "csv",
        "object": "dir/example.csv",
        "fieldDelimiter": ",",
        "lineDelimiter": "\n",
        "encoding": "UTF-8",
        "nullFormat": "null",
        "dateFormat": "yyyy-MM-dd",
        "writeMode": "truncate",
        "maxFileSize": 100,
        "writeSingleObject": false
      },
      "name": "Writer",
      "category": "writer"
    }
  ],
  "setting": {
    "errorLimit": {
      "record": "0"
    },
    "speed": {
      "concurrent": 1
    }
  },
  "order": {
    "hops": [
      {
        "from": "Reader",
        "to": "Writer"
      }
    ]
  }
}

Writer脚本参数

参数

描述

是否必选

默认值

datasource

数据源名称,脚本模式支持添加数据源,该配置项填写的内容必须与添加的数据源名称保持一致。数据源中需配置Azure Blob Storage容器的SAS URL与签名(sig)。

object

Azure Blob Storage Writer写入的文件名(含路径前缀),使用文件名模拟目录,分隔符为(/)。

  • 使用"object": "datax.csv",写入的Objectdatax开头,多文件写入时后缀添加随机UUID字符串。

  • 使用"object": "cdo/datax.csv",写入的Objectcdo/datax开头。

  • 若您不需要后缀随机UUID,可配置"writeSingleObject": "true",详情请参见writeSingleObject说明。

writeMode

Azure Blob Storage Writer写入前数据的处理:

  • truncate:写入前清理Object名称前缀匹配的所有Object。例如"object":"abc",将清理所有abc开头的Object。

  • append:写入前不进行任何处理,直接使用Object名称写入,多文件写入时使用随机UUID后缀名保证文件名不冲突。

  • nonConflict:写入前校验指定Object是否已存在,若存在直接报错。

writeSingleObject

写数据时是否写单个文件:

  • true:所有并发任务通过Block Blob分块上传写入同一个Object,当读不到任何数据时不会产生空文件。

  • false:每个并发任务写入独立Object,文件名追加随机UUID后缀,当读不到任何数据时若配置了header会输出仅含文件头的空文件,否则不输出文件。

说明

写入parquet、orc格式时该参数不生效。

false

fileFormat

文件写出格式,支持以下几种:

  • csv:仅支持严格的csv格式。如果待写数据包括列分隔符,则会根据csv的转义语法转义,转义符号为双引号(")。

  • text:使用列分隔符简单分割待写数据,对于待写数据包括列分隔符情况下不进行转义。

  • jsonl:JSON Lines格式写出,每行一个JSON对象。

  • parquet:需增加parquetSchema参数定义数据类型,仅支持脚本模式。

  • orc:需转脚本模式配置。

text

fieldDelimiter

写入的字段分隔符。csv、text格式有效,如果不指定默认为(,)。如果分隔符不可见,请填写Unicode编码,例如\u001b\u007c

,

encoding

写出文件的编码配置。

utf-8

nullFormat

文本文件中无法使用标准字符串定义null(空指针),数据同步系统提供nullFormat定义哪些字符串可以表示为null。例如配置nullFormat:"null",如果源头数据是null,数据同步系统会视作null字段。

\N

dateFormat

日期类型数据的格式化格式。

yyyy-MM-dd HH:mm:ss

header

写出文件的表头,例如["id", "name", "age"]。csv、text格式有效,写入第一个分块的最前面。

blockSizeInMB

Block Blob分块上传时单个分块的大小,单位MB。Azure Block Blob最多支持50000个分块,单块大小范围为4MB~100MB。若分块数量超出限制,可调大分块大小以支持更大的文件上传。 说明 * 高级模式,向导模式不支持此参数的配置。 * 仅对text、csv、jsonl格式生效。

64

parquetSchema

Parquet文件格式写入时的必填项,用来描述目标文件的结构,当且仅当 fileFormatparquet 时生效。格式如下。

parquetSchema的配置格式说明如下:

  • MessageType名:填写名称。

  • 是否必填:required表示非空,optional表示可为空。推荐全部填写optional。

  • 数据类型:Parquet文件支持BOOLEAN、Int32、Int64、Int96、FLOAT、DOUBLE、BINARY(如果是字符串类型,请填BINARY)和fixed_len_byte_array类型。

  • 每行列设置必须以分号结尾,最后一行也要写上分号。

配置示例如下所示。

"parquetSchema": "message m { optional int32 minute_id; optional int32 dsp_id; optional int32 adx_pid; optional int64 req; optional int64 res; optional int64 suc; optional int64 imp; optional double revenue; }"

column

写入parquet、orc格式时配置的目标列信息,格式为{"name":"列名","type":"列类型"}

compress

写入parquet、orc文件的压缩格式,例如SNAPPYNONE等。text、csv、jsonl格式不支持压缩。

maxRetryTimes

写入(上传分块、提交分块列表、删除Object等)失败时的最大重试次数。配置0表示关闭重试。 说明 高级模式,向导模式不支持此参数的配置。

30

retryIntervalSeconds

写入失败时重试间隔,单位秒。 仅脚本模式支持,向导模式不支持此参数的配置。

5

requestTimeoutSeconds

单次请求超时时间,单位秒。 仅脚本模式支持,向导模式不支持此参数的配置。

60