メインコンテンツまでスキップ
バージョン: 4.x

CSV

この文書では、CSV形式のデータファイルをDorisに読み込む方法について説明します。Dorisは、カスタムデリミタ、フィールドエンクロージャを含む柔軟なCSV形式設定をサポートし、さまざまなシナリオでのデータ読み込み要件を満たすためのさまざまな読み込み方法を提供します。

読み込み方法

DorisはCSV形式データを読み込むために以下の方法をサポートします:

パラメータ設定

パラメータサポート

以下の表は、さまざまな読み込み方法でサポートされているCSV形式パラメータを示しています:

パラメータデフォルト値Stream LoadBroker LoadRoutine LoadMySQL LoadTVF
Line Delimiter\nline_delimiterLINES TERMINATED BYサポートしていませんLINES TERMINATED BYline_delimiter
Column Delimiter\tcolumn_separatorCOLUMNS TERMINATED BYCOLUMNS TERMINATED BYCOLUMNS TERMINATED BYcolumn_separator
EnclosureなしenclosePROPERTIES.enclosePROPERTIES.enclosePROPERTIES.encloseenclose
Escape Character\escapePROPERTIES.escapePROPERTIES.escapePROPERTIES.escapeescape
Skip Lines0skip_linesPROPERTIES.skip_linesサポートしていませんIGNORE LINESskip_lines
Trim Double Quotesfalsetrim_double_quotesサポートしていませんPROPERTIES.trim_double_quotesサポートしていませんtrim_double_quotes
Compression Formatplaincompress_typePROPERTIES.compress_typeサポートしていませんサポートしていませんcompress_type
注意
  1. Stream Load: パラメータはHTTP Headersを通じて直接指定します(例:-H "line_delimiter:\n"
  2. Broker Load: パラメータはSQL文で指定します:
    • デリミタはCOLUMNS TERMINATED BYLINES TERMINATED BYで指定
    • その他のパラメータはPROPERTIESで指定(例:PROPERTIES("compress_type"="gz")
  3. Routine Load: パラメータはSQL文で指定します:
    • デリミタはCOLUMNS TERMINATED BYで指定
    • その他のパラメータはPROPERTIESで指定(例:PROPERTIES("enclose"="\"")
  4. MySQL Load: パラメータはSQL文で指定します:
    • デリミタはLINES TERMINATED BYCOLUMNS TERMINATED BYで指定
    • その他のパラメータはPROPERTIESで指定(例:PROPERTIES("escape"="\\")
  5. TVF: パラメータはTVF文で指定します(例:S3("line_delimiter"="\n")

パラメータ説明

Line Delimiter

  • 目的:データファイル内の改行文字を指定

  • デフォルト値:\n

  • 特徴:複数文字の組み合わせを改行として使用可能

  • 使用例と事例:

    • Linux/Unixシステムファイル:

      Data File:
      John,25\n
      Mary,30\n

      Parameter Setting:
      line_delimiter: \n (default value, can be omitted)
  • Windows システムファイル:

    Data File:
    John,25\r\n
    Mary,30\r\n

    Parameter Setting:
    line_delimiter: \r\n
  • Special Program Generated Files:

    Data File:
    John,25\r
    Mary,30\r

    Parameter Setting:
    line_delimiter: \r
  • カスタム複数文字区切り文字:

    Data File:
    John,25||
    Mary,30||

    Parameter Setting:
    line_delimiter: ||

Column Delimiter

  • 目的: データファイル内のカラム区切り文字を指定します

  • デフォルト値: \t (タブ)

  • 機能:

    • 可視文字と不可視文字をサポート
    • 複数文字の組み合わせをサポート
    • 不可視文字は\xプレフィックス付きの16進表現を使用する必要があります
  • MySQL Protocolの特別な処理:

    • 不可視文字には追加のバックスラッシュが必要
    • 例えば、Hiveの\x01はBroker Loadでは\\x01と記述する必要があります
  • 使用例とサンプル:

    • 一般的な可視文字:

      Data File:
      John,25,New York
      Mary,30,Los Angeles

      Parameter Setting:
      column_separator: ,
  • Tab(デフォルト):

    Data File:
    John 25 New York
    Mary 30 Los Angeles

    Parameter Setting:
    column_separator: \t (default value, can be omitted)
  • Hive Files (Stream Load):

    Data File:
    John\x0125\x01New York
    Mary\x0130\x01Los Angeles

    Parameter Setting:
    column_separator: \x01
  • Hive Files (Broker Load):

    Data File:
    John\x0125\x01New York
    Mary\x0130\x01Los Angeles

    Parameter Setting:
    PROPERTIES("column_separator"="\\x01")
  • 複数文字区切り文字:

    Data File:
    John||25||New York
    Mary||30||Los Angeles

    Parameter Setting:
    column_separator: ||

Enclosure

  • 目的: 特殊文字を含むフィールドが誤って解析されることを防ぐ

  • 制限: 単一バイト文字のみをサポート

  • 一般的な文字:

    • シングルクォート: '
    • ダブルクォート: "
  • 使用例とサンプル:

    • フィールドにColumn Delimiterが含まれる場合:

      Data: a,'b,c',d
      Column Delimiter: ,
      Enclosure: '
      Parsing Result: 3 fields [a] [b,c] [d]
  • フィールドに行区切り文字が含まれる場合:

    Data: a,'b\nc',d
    Column Delimiter: ,
    Enclosure: '
    Parsing Result: 3 fields [a] [b\nc] [d]
  • フィールドが列区切り文字と行区切り文字の両方を含む場合:

    Data: a,'b,c\nd,e',f
    Column Delimiter: ,
    Enclosure: '
    Parsing Result: 3 fields [a] [b,c\nd,e] [f]

エスケープ文字

  • 目的: エンクロージャ文字と同じ文字をフィールド内でエスケープする

  • 制限事項: 単一バイト文字のみサポート、デフォルトは \

  • 使用例:

    • フィールドにエンクロージャ文字が含まれる場合:

      Data: a,'b,\'c',d
      Column Delimiter: ,
      Enclosure: '
      Escape Character: \
      Parsing Result: 3 fields [a] [b,'c] [d]
  • フィールドに複数の囲み文字が含まれている場合:

    Data: a,"b,\"c\"d",e
    Column Delimiter: ,
    Enclosure: "
    Escape Character: \
    Parsing Result: 3 fields [a] [b,"c"d] [e]
  • フィールドにエスケープ文字自体が含まれている場合:

    Data: a,'b\\c',d
    Column Delimiter: ,
    Enclosure: '
    Escape Character: \
    Parsing Result: 3 fields [a] [b\c] [d]

Skip Lines

  • 目的: CSVファイルの最初の数行をスキップします

  • 型: Integer

  • デフォルト値: 0

  • 特記事項:

    • formatがcsv_with_namesの場合、システムは自動的に最初の行(列名)をスキップし、skip_linesパラメータを無視します
    • formatがcsv_with_names_and_typesの場合、システムは自動的に最初の2行(列名と型)をスキップし、skip_linesパラメータを無視します
  • 使用例とサンプル:

    • タイトル行をスキップ:

      Data File:
      Name,Age,City
      John,25,New York
      Mary,30,Los Angeles

      Parameter Setting:
      skip_lines: 1
      Result: Skip title line, load subsequent data
  • コメント行をスキップ:

    Data File:
    # User Information Table
    # Created Time: 2024-01-01
    John,25,New York
    Mary,30,Los Angeles

    Parameter Setting:
    skip_lines: 2
    Result: Skip comment lines, load subsequent data
  • csv_with_names形式を使用する:

    Data File:
    name,age,city
    John,25,New York
    Mary,30,Los Angeles

    Parameter Setting:
    format: csv_with_names
    Result: System automatically skips the first line of column names
  • csv_with_names_and_types フォーマットを使用してください:

    Data File:
    name,age,city
    string,int,string
    John,25,New York
    Mary,30,Los Angeles

    Parameter Setting:
    format: csv_with_names_and_types
    Result: System automatically skips the first two lines of column names and types

Trim Double Quotes

  • 目的: CSVファイル内の各フィールドから最外側のダブルクォートを除去します
  • 型: Boolean
  • デフォルト値: false
  • 使用例とサンプル:
    • Trim Double Quotes:

      Data File:
      "John","25","New York"
      "Mary","30","Los Angeles"

      Parameter Setting:
      trim_double_quotes: true
      Result:
      John,25,New York
      Mary,30,Los Angeles

Compression Format

  • 目的: データファイルの圧縮形式を指定します
  • 型: String、大文字小文字を区別しません
  • デフォルト値: plain
  • サポートされている圧縮形式:
    • plain: 圧縮なし(デフォルト)
    • bz2: BZIP2圧縮
    • deflate: DEFLATE圧縮
    • gz: GZIP圧縮
    • lz4: LZ4 Frame形式圧縮
    • lz4_block: LZ4 Block形式圧縮
    • lzo: LZO圧縮
    • lzop: LZOP圧縮
    • snappy_block: SNAPPY Block形式圧縮
  • 注意:
    • tarはファイルパッケージング形式であり、圧縮形式ではないためサポートされていません
    • tarパッケージファイルを使用する必要がある場合は、ロード前に先に展開してください

使用例

このセクションでは、異なるロード方法におけるCSV形式の使用方法を説明します。

Stream Load

# Specify delimiter
curl --location-trusted -u root: \
-H "column_separator:," \
-H "line_delimiter:\n" \
-T example.csv \
http://<fe_host>:<fe_http_port>/api/test_db/test_table/_stream_load

# Handle quoted data
curl --location-trusted -u root: \
-H "column_separator:," \
-H "enclose:\"" \
-T example.csv \
http://<fe_host>:<fe_http_port>/api/test_db/test_table/_stream_load

# Load compressed file
curl --location-trusted -u root: \
-H "compress_type:gz" \
-T example.csv.gz \
http://<fe_host>:<fe_http_port>/api/test_db/test_table/_stream_load

ブローカー負荷

-- Specify delimiter
LOAD LABEL test_db.test_label
(
DATA INFILE("s3://bucket/example.csv")
INTO TABLE test_table
COLUMNS TERMINATED BY ","
LINES TERMINATED BY "\n"
...
);

-- Handle quoted data
LOAD LABEL test_db.test_label
(
DATA INFILE("s3://bucket/example.csv")
INTO TABLE test_table
COLUMNS TERMINATED BY ","
LINES TERMINATED BY "\n"
PROPERTIES
(
"enclose" = "\"",
"escape" = "\\"
)
...
);

-- Load compressed file
LOAD LABEL test_db.test_label
(
DATA INFILE("s3://bucket/example.csv.gz")
INTO TABLE test_table
COLUMNS TERMINATED BY ","
LINES TERMINATED BY "\n"
PROPERTIES
(
"compress_type" = "gz"
)
...
);

Routine Load

-- Specify delimiter
CREATE ROUTINE LOAD test_db.test_job ON test_table
COLUMNS TERMINATED BY ","
FROM KAFKA
(
...
);

-- Handle quoted data
CREATE ROUTINE LOAD test_db.test_job ON test_table
COLUMNS TERMINATED BY ","
PROPERTIES
(
"enclose" = "\"",
"escape" = "\\"
)
FROM KAFKA
(
...
);

MySQL Load

-- Specify delimiter
LOAD DATA LOCAL INFILE 'example.csv'
INTO TABLE test_table
COLUMNS TERMINATED BY ','
LINES TERMINATED BY '\n';

-- Handle quoted data
LOAD DATA LOCAL INFILE 'example.csv'
INTO TABLE test_table
COLUMNS TERMINATED BY ','
LINES TERMINATED BY '\n'
PROPERTIES
(
"enclose" = "\"",
"escape" = "\\"
);

-- Skip table header
LOAD DATA LOCAL INFILE 'example.csv'
INTO TABLE test_table
COLUMNS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

TVF Load

-- Specify delimiter
INSERT INTO test_table
SELECT *
FROM S3
(
"path" = "s3://bucket/example.csv",
"column_separator" = ",",
"line_delimiter" = "\n",
...
);

-- Handle quoted data
INSERT INTO test_table
SELECT *
FROM S3
(
"path" = "s3://bucket/example.csv",
"column_separator" = ",",
"enclose" = "\"",
"escape" = "\\",
...
);

-- Load compressed file
INSERT INTO test_table
SELECT *
FROM S3
(
"path" = "s3://bucket/example.csv.gz",
"column_separator" = ",",
"line_delimiter" = "\n",
"compress_type" = "gz",
...
);