Back to Seatunnel

ObsFile

docs/en/connectors/source/ObsFile.md

2.3.1315.5 KB
Original Source

import ChangeLog from '../changelog/connector-file-obs.md';

ObsFile

Obs file source connector

Support those engines

Spark

Flink

Seatunnel Zeta

Key features

Description

Read data from huawei cloud obs file system.

If you use spark/flink, In order to use this connector, You must ensure your spark/flink cluster already integrated hadoop. The tested hadoop version is 2.x.

If you use SeaTunnel Engine, It automatically integrated the hadoop jar when you download and install SeaTunnel Engine. You can check the jar package under ${SEATUNNEL_HOME}/lib to confirm this.

We made some trade-offs in order to support more file types, so we used the HDFS protocol for internal access to OBS and this connector need some hadoop dependencies. It only supports hadoop version 2.9.X+.

Required Jar List

jarsupported versionsmaven
hadoop-huaweicloudsupport version >= 3.1.1.29Download
esdk-obs-javasupport version >= 3.19.7.3Download
okhttpsupport version >= 3.11.0Download
okiosupport version >= 1.14.0Download

Please download the support list corresponding to 'Maven' and copy them to the '$SEATUNNEL_HOME/plugins/jdbc/lib/' working directory.

And copy all jars to $SEATUNNEL_HOME/lib/

Options

nametyperequireddefaultdescription
pathstringyes-The target dir path
file_format_typestringyes-File type.Tips
bucketstringyes-The bucket address of obs file system, for example: obs://obs-bucket-name
access_keystringyes-The access key of obs file system
access_secretstringyes-The access secret of obs file system
endpointstringyes-The endpoint of obs file system
read_columnslistyes-The read column list of the data source, user can use it to implement field projection.Tips
delimiterstringno\001Field delimiter, used to tell connector how to slice and dice fields when reading text files
row_delimiterstringno\nRow delimiter, used to tell connector how to slice and dice rows when reading text files. Default is \n for text files.
parse_partition_from_pathbooleannotrueControl whether parse the partition keys and values from file path. Tips
skip_header_row_numberlongno0Skip the first few lines, but only for the txt and csv.
date_formatstringnoyyyy-MM-ddDate type format, used to tell the connector how to convert string to date.Tips
datetime_formatstringnoyyyy-MM-dd HH:mm:ssDatetime type format, used to tell the connector how to convert string to datetime.Tips
time_formatstringnoHH:mm:ssTime type format, used to tell the connector how to convert string to time.Tips
filename_extensionstringno-Filter filename extension, which used for filtering files with specific extension. Example: csv .txt json .xml.
schemaconfigno-Tips
common-optionsno-Tips
sheet_namestringno-Reader the sheet of the workbook,Only used when file_format is excel.
file_filter_modified_startstringno-File modification time filter. The connector will filter some files base on the last modification start time (include start time). The default data format is yyyy-MM-dd HH:mm:ss.
file_filter_modified_endstringno-File modification time filter. The connector will filter some files base on the last modification end time (not include end time). The default data format is yyyy-MM-dd HH:mm:ss.
quote_charstringno"A single character that encloses CSV fields, allowing fields with commas, line breaks, or quotes to be read correctly.
escape_charstringno-A single character that allows the quote or other special characters to appear inside a CSV field without ending the field.

Tips

<span id="parse_partition_from_path"> parse_partition_from_path </span>

Control whether parse the partition keys and values from file path

For example if you read a file from path obs://hadoop-cluster/tmp/seatunnel/parquet/name=tyrantlucifer/age=26

Every record data from the file will be added these two fields:

nameage
tyrantlucifer26

Do not define partition fields in schema option

<span id="date_format"> date_format </span>

Date type format, used to tell the connector how to convert string to date, supported as the following formats:

yyyy-MM-dd yyyy.MM.dd yyyy/MM/dd

default yyyy-MM-dd

<span id="datetime_format"> datetime_format </span>

Datetime type format, used to tell the connector how to convert string to datetime, supported as the following formats:

yyyy-MM-dd HH:mm:ss yyyy.MM.dd HH:mm:ss yyyy/MM/dd HH:mm:ss yyyyMMddHHmmss

default yyyy-MM-dd HH:mm:ss

<span id="time_format"> time_format </span>

Time type format, used to tell the connector how to convert string to time, supported as the following formats:

HH:mm:ss HH:mm:ss.SSS

default HH:mm:ss

<span id="skip_header_row_number"> skip_header_row_number </span>

Skip the first few lines, but only for the txt and csv.

For example, set like following:

skip_header_row_number = 2

Then Seatunnel will skip the first 2 lines from source files

<span id="file_format_type"> file_format_type </span>

File type, supported as the following file types:

text csv parquet orc json excel markdown

If you assign file type to json, you should also assign schema option to tell the connector how to parse data to the row you want.

For example,upstream data is the following:

json

{"code": 200, "data": "get success", "success": true}


> You can also save multiple pieces of data in one file and split them by one newline:

```json lines

{"code":  200, "data":  "get success", "success":  true}
{"code":  300, "data":  "get failed", "success":  false}

you should assign schema as the following:

hocon

schema {
    fields {
        code = int
        data = string
        success = boolean
    }
}

connector will generate data as the following:

codedatasuccess
200get successtrue

If you assign file type to parquet orc, schema option not required, connector can find the schema of upstream data automatically.

If you assign file type to text csv, you can choose to specify the schema information or not.

For example, upstream data is the following:

text

tyrantlucifer#26#male

If you do not assign data schema connector will treat the upstream data as the following:

content
tyrantlucifer#26#male

If you assign data schema, you should also assign the option delimiter too except CSV file type

you should assign schema and delimiter as the following:

hocon

delimiter = "#"
schema {
    fields {
        name = string
        age = int
        gender = string 
    }
}

connector will generate data as the following:

nameagegender
tyrantlucifer26male

If you assign file type to markdown, SeaTunnel can parse markdown files and extract structured data. The markdown parser extracts various elements including headings, paragraphs, lists, code blocks, tables, and more. Each element is converted to a row with the following schema:

  • element_id: Unique identifier for the element
  • element_type: Type of the element (Heading, Paragraph, ListItem, etc.)
  • heading_level: Level of heading (1-6, null for non-heading elements)
  • text: Text content of the element
  • page_number: Page number (default: 1)
  • position_index: Position index within the document
  • parent_id: ID of the parent element
  • child_ids: Comma-separated list of child element IDs

Note: Markdown format only supports reading, not writing.

<span id="schema"> schema </span>

fields

The schema of upstream data. For more details, please refer to Schema Feature.

<span id="schema"> read_columns </span>

The read column list of the data source, user can use it to implement field projection.

The file type supported column projection as the following shown:

  • text
  • json
  • csv
  • orc
  • parquet
  • excel

If the user wants to use this feature when reading text json csv files, the schema option must be configured

<span id="common_options "> common options </span>

Source plugin common parameters, please refer to Source Common Options for details.

Task Example

text file

For text file format simple config

hocon

  ObsFile {
    path = "/seatunnel/text"
    bucket = "obs://obs-bucket-name"
    access_key = "xxxxxxxxxxxxxxxxx"
    access_secret = "xxxxxxxxxxxxxxxxxxxxxx"
    endpoint = "obs.xxxxxx.myhuaweicloud.com"
    file_format_type = "text"
  }

parquet file

For parquet file format simple config

hocon

  ObsFile {
    path = "/seatunnel/parquet"
    bucket = "obs://obs-bucket-name"
    access_key = "xxxxxxxxxxxxxxxxx"
    access_secret = "xxxxxxxxxxxxxxxxxxxxxx"
    endpoint = "obs.xxxxxx.myhuaweicloud.com"
    file_format_type = "parquet"
  }

orc file

For orc file format simple config

hocon

  ObsFile {
    path = "/seatunnel/orc"
    bucket = "obs://obs-bucket-name"
    access_key = "xxxxxxxxxxxxxxxxx"
    access_secret = "xxxxxxxxxxxxxxxxxxxxxx"
    endpoint = "obs.xxxxxx.myhuaweicloud.com"
    file_format_type = "orc"
  }

json file

For json file format simple config

hocon

  ObsFile {
    path = "/seatunnel/json"
    bucket = "obs://obs-bucket-name"
    access_key = "xxxxxxxxxxxxxxxxx"
    access_secret = "xxxxxxxxxxxxxxxxxxxxxx"
    endpoint = "obs.xxxxxx.myhuaweicloud.com"
    file_format_type = "json"
  }

excel file

For excel file format simple config

hocon

  ObsFile {
    path = "/seatunnel/excel"
    bucket = "obs://obs-bucket-name"
    access_key = "xxxxxxxxxxxxxxxxx"
    access_secret = "xxxxxxxxxxxxxxxxxxxxxx"
    endpoint = "obs.xxxxxx.myhuaweicloud.com"
    file_format_type = "excel"
  }

csv file

For csv file format simple config

hocon

  ObsFile {
    path = "/seatunnel/csv"
    bucket = "obs://obs-bucket-name"
    access_key = "xxxxxxxxxxxxxxxxx"
    access_secret = "xxxxxxxxxxxxxxxxxxxxxx"
    endpoint = "obs.xxxxxx.myhuaweicloud.com"
    file_format_type = "csv"
    delimiter = ","
  }

Changelog

<ChangeLog />