すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB for SelectDB:SELECT\ INTO\ OUTFILE

最終更新日:Mar 28, 2026

SELECT INTO OUTFILE 文を使用すると、ApsaraDB for SelectDB のクエリ結果をリモートストレージ(Object Storage Service (OSS) または Hadoop 分散ファイルシステム (HDFS))にエクスポートできます。これは、データバックアップやデータ移行を目的としています。

仕組み

  1. エクスポート対象のデータを定義する SELECT クエリを作成します。

  2. OSS または HDFS 上の宛先パスを指定し、出力フォーマットおよびプロパティを設定します。

  3. 文を実行します。SelectDB はクエリを実行し、結果を宛先に単一の同期操作で書き込みます。

  4. 返された行のファイル数、行数、ファイルサイズを確認して、正常終了を確認します。

注意事項

同期実行と結果の整合性

SELECT INTO OUTFILE は同期処理です。この文は、エクスポートが完了するか失敗するまで応答を返しません。エクスポート中に接続が切断された場合、ステータスは返されず、エクスポートが正常に完了したかどうかを判断できません。

エクスポートの成功を確実に確認するには、"success_file_name" = "SUCCESS"PROPERTIES 句に追加してください。エクスポートが成功すると、SelectDB は出力ディレクトリに SUCCESS という名前のマーカーファイルを書き込みます。

シングルスレッド実行

デフォルトでは、エクスポートは単一の BE ノード上で 1 スレッドで実行されます。エクスポートの所要時間は、クエリ実行時間と結果セットの書き込み時間の合計となります:

総所要時間 = クエリ実行時間 + 結果書き込み時間

大規模なデータセットの場合、エクスポート実行前にタイムアウト値を延長してください:

SET query_timeout = <秒数>;

セッション変数についての詳細については、「変数の管理」をご参照ください。

ファイルパスおよび上書き動作

SELECT INTO OUTFILE は、宛先パスや既存のファイルの存在をチェックしません。また、パスを自動的に作成したり、既存のファイルを上書きしたりすることもありません。パスの作成および上書き動作は、リモートストレージシステム(OSS または HDFS)によって制御されます。

ファイル管理の責任

SelectDB はエクスポートされたファイルを管理しません。正常終了したジョブの出力ファイルおよび失敗したジョブの残存ファイルは、ストレージシステム内で直接クリーンアップしてください。

サポートされるファイル形式

データの型サポートされる形式
基本型CSV、CSV_WITH_NAMES、CSV_WITH_NAMES_AND_TYPES、Parquet、ORC(Optimized Row Columnar)
複合型(ARRAY、MAP、STRUCT)CSV、CSV_WITH_NAMES、CSV_WITH_NAMES_AND_TYPES、ORC
ネストされたデータ非対応

特殊な出力値

  • BITMAP および HyperLogLog(HLL)関数: 出力に非表示文字が含まれる場合、代わりに \N(NULL を示す)が返されます。

  • 地理空間関数: 出力はバイナリ形式でエンコードされます。ST_AsText を使用すると、読み取り可能なテキスト形式で取得できます。影響を受ける関数: ST_CIRCLEST_POINTST_POLYGONST_GEOMETRYFROMTEXTST_LINEFROMTEXTST_GEOMETRYFROMWKB

結果ファイルの動作

  • 空の結果セットでも出力ファイルが生成されます。

  • セグメントファイルは常に完全な行を含むため、実際のファイルサイズは max_file_size と若干異なる場合があります。

制限事項

SELECT INTO OUTFILE は、Amazon Simple Storage Service(Amazon S3)プロトコルおよび HDFS プロトコルのみをサポートしています。

構文

query_stmt
INTO OUTFILE "file_path"
[FORMAT AS format_name]
[PROPERTIES ("key"="value", ...)]

パラメーター

パラメーター必須説明
query_stmtはいSELECT 文で、エクスポート対象のデータを定義します。
file_pathはい宛先パスおよび任意のファイル名プレフィックス。プレフィックスを省略するとディレクトリのみが使用されます(例:"hdfs://path/to/")。
FORMAT ASいいえ出力フォーマット。選択肢: CSV(デフォルト)、CSV_WITH_NAMESCSV_WITH_NAMES_AND_TYPESPARQUETORC
PROPERTIESいいえファイル、HDFS、または S3 のプロパティ。詳細については、「ファイルプロパティ」、「HDFS プロパティ」、および「S3 プロパティ」をご参照ください。

ファイル命名規則

file_path にプレフィックスが含まれている場合(例:"s3://bucket_name/to/my_file_")、出力ファイルは以下のパターンで命名されます:

<プレフィックス><インスタンス名>_<シーケンス>.csv
  • シーケンス番号は 0 から始まり、各セグメントファイルごとに増分されます。

  • 単一の出力ファイルの場合、シーケンス番号は省略されます。

  • デフォルトの拡張子は .csv です。file_suffix を使用して上書きできます。

例: プレフィックス my_file_ および FORMAT AS CSV を指定した場合、マルチファイルエクスポートでは以下のようなファイルが生成されます:

my_file_abcdefg_0.csv
my_file_abcdefg_1.csv
my_file_abcdefg_2.csv
...

ファイルプロパティ

プロパティ必須説明
column_separatorいいえ列区切り文字。CSV 形式でのみ適用されます。
line_delimiterいいえ行区切り文字。CSV 形式でのみ適用されます。
max_file_sizeいいえセグメントファイルごとの最大サイズ。有効範囲:5 MB~2 GB。デフォルト:1 GB。ORC ファイルの場合、実際のサイズは ceil(max_file_size / 64) × 64 MB になります。
delete_existing_filesいいえエクスポート前に宛先ディレクトリ内のすべてのファイルを削除するかどうかを指定します。false(デフォルト):既存のファイルを削除せずにエクスポートします。true:宛先ディレクトリ内のすべてのファイルおよびサブディレクトリを事前に削除します。
success_file_nameいいえエクスポート成功後に宛先ディレクトリに書き込まれるマーカーファイルの名前(例:"SUCCESS")。接続が切断される可能性がある場合に、エクスポート完了を確認するために使用します。
file_suffixいいえ出力ファイルの拡張子。デフォルトの拡張子を上書きします。
警告

delete_existing_files = true はデータを恒久的に削除します。この設定はテスト環境でのみ使用してください。有効化するには、Alibaba Cloud テクニカルサポートへチケットを送信し、enable_delete_existing_files = truefe.conf に設定したうえでフロントエンドを再起動してください。

`delete_existing_files` のスコープ例:

  • "file_path" = "/user/tmp"/user/ 配下のすべてのファイルおよびディレクトリを削除します。

  • "file_path" = "/user/tmp/"/user/tmp/ 配下のすべてのファイルおよびディレクトリを削除します。

HDFS プロパティ

HDFS を介したエクスポートを行う場合、以下のプロパティを指定する必要があります。

プロパティ必須説明
fs.defaultFSはいNameNode のエンドポイントおよびポート。
hadoop.usernameはいHDFS 認証用のユーザー名。
dfs.nameservicesはいName Service 名。これは hdfs-site.xml の値と一致している必要があります。
dfs.ha.namenodes.[nameservice ID]はいName Service 内の NameNode ID。これは hdfs-site.xml の値と一致している必要があります。
dfs.namenode.rpc-address.[nameservice ID].[name node ID]はい各 NameNode の RPC(Remote Procedure Call)アドレス。これは hdfs-site.xml の値と一致している必要があります。
dfs.client.failover.proxy.provider.[nameservice ID]はいアクティブな NameNode のフェールオーバーに使用する Java クラス。デフォルト値:org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider

Kerberos 認証(有効な場合)

プロパティ必須説明
dfs.namenode.kerberos.principalはいHDFS NameNode の Kerberos プリンシパル名。
hadoop.security.authenticationはい認証方式。値を kerberos に設定します。
hadoop.kerberos.principalはいKerberos 認証用のプリンシパル。
hadoop.kerberos.keytabはいKerberos キータブファイルへのパス。

S3 プロパティ

これらのプロパティは、S3 プロトコルをサポートするあらゆるストレージシステム(OSS を含む)に適用されます。

プロパティ必須説明
s3.endpointはい宛先ストレージシステムのエンドポイント。
s3.access_keyはい認証用のアクセスキー。
s3.secret_keyはい認証用のシークレットキー。
s3.regionはい宛先ストレージシステムのリージョン。
s3.session_token一時的な認証情報を使用する場合一時セッション認証用のセッショントークン。
use_path_styleいいえアクセススタイル。デフォルト:false(仮想ホストスタイル)。仮想ホストスタイルをサポートしないストレージシステムに対して、パススタイルアクセスを強制する場合は true に設定します。

URI スキーム: http://https://、または s3://file_path で使用します。

  • http:// または https://use_path_style によりアクセススタイルが決定されます。

  • s3://use_path_style の設定に関わらず、常に仮想ホストスタイルを使用します。

重要

宛先 URL には、必ず URI スキーム(http://https://、または s3://)を含めてください。スキームを省略すると、以下のエラーが発生します:ERROR 1105 (HY000): errCode = 2, detailMessage = Unknown properties: [s3.region, s3.endpoint, s3.secret_key, s3.access_key]

応答

SELECT INTO OUTFILE は同期処理です。文の実行が完了すると、エクスポートスレッドごとに 1 行の応答が返されます。

正常終了時の応答:

SELECT * FROM tbl1 LIMIT 10 INTO OUTFILE "file:///home/work/path/result_";
+------------+-----------+----------+--------------------------------------------------------------------+
| ファイル番号 | 合計行数  | ファイルサイズ | URL                                                                |
+------------+-----------+----------+--------------------------------------------------------------------+
|          1 |         3 |        7 | file:///192.168.1.10/home/work/path/result_{fragment_instance_id}_ |
|          1 |         2 |        4 | file:///192.168.1.11/home/work/path/result_{fragment_instance_id}_ |
+------------+-----------+----------+--------------------------------------------------------------------+
2 行が取得されました (2.218 秒)
フィールド説明
FileNumber生成されたファイル数。
TotalRows結果セットの行数。
FileSizeエクスポートされたファイルの合計サイズ(バイト単位)。
URLデータがローカルディスクにエクスポートされた場合の、データが書き込まれたコンピュートノード。

並列エクスポート時の応答(スレッドごとに 1 行、複数行):

+------------+-----------+----------+--------------------------------------------------------------------+
| ファイル数 | 合計行数 | ファイルサイズ | URL                                                                |
+------------+-----------+----------+--------------------------------------------------------------------+
|          1 |         3 |        7 | file:///192.168.1.10/home/work/path/result_{fragment_instance_id}_ |
|          1 |         2 |        4 | file:///192.168.1.11/home/work/path/result_{fragment_instance_id}_ |
+------------+-----------+----------+--------------------------------------------------------------------+
2 行が返されました(2.218 秒)

エラー応答:

ERROR 1064 (HY000): errCode = 2, detailMessage = ...

並列エクスポートの有効化

デフォルトでは、エクスポートは単一の BE ノードスレッドで実行されます。並列エクスポートを有効化すると、ワークロードを複数の BE ノードに分散できます。

ステップ 1:セッション変数を有効化します。

SET enable_parallel_outfile = true;

ステップ 2:クエリが並列エクスポートをサポートしているか確認します。

EXPLAIN を使用して、SELECT INTO OUTFILE 文を解析します:

EXPLAIN <select_into_outfile_statement>;

出力を確認します:

  • 並列エクスポートがサポートされている場合: RESULT FILE SINKPLAN FRAGMENT 1 に表示されます。

  • 並列エクスポートがサポートされていない場合: RESULT FILE SINKPLAN FRAGMENT 0 に表示されます。

ORDER BY を含むクエリは、enable_parallel_outfile = true であっても並列実行できません。これは、並べ替えにはシングルスレッドによるマージステップが必要であるためです。

並列エクスポートがサポートされるクエリプランの例:

+-----------------------------------------------------------------------------+
| 実行計画文字列                                                         |
+-----------------------------------------------------------------------------+
| PLAN FRAGMENT 0                                                             |
|  OUTPUT EXPRS:<slot 2> | <slot 3> | <slot 4> | <slot 5>                     |
|   PARTITION: UNPARTITIONED                                                  |
|                                                                             |
|   RESULT SINK                                                               |
|                                                                             |
|   1:EXCHANGE                                                                |
|                                                                             |
| PLAN FRAGMENT 1                                                             |
|  OUTPUT EXPRS:`k1` + `k2`                                                   |
|   PARTITION: HASH_PARTITIONED: `default_cluster:test`.`multi_tablet`.`k1`   |
|                                                                             |
|   RESULT FILE SINK                                                          |
|   FILE PATH: s3://ml-bd-repo/bpit_test/outfile_1951_                        |
|   STORAGE TYPE: S3                                                          |
|                                                                             |
|   0:OlapScanNode                                                            |
|      TABLE: multi_tablet                                                    |
+-----------------------------------------------------------------------------+

ステップ 3:最大同時実行数の算出(任意)

並列エクスポートがサポートされている場合、同時実行可能な最大リクエスト数は以下のとおりです:

be_instance_num × parallel_fragment_exec_instance_num
  • be_instance_num:BE ノード数。32 コア以下のクラスターでは 1 ノード、32 コア以上のクラスターでは、各ノードが 32 コアとなる複数ノードが使用されます。

  • parallel_fragment_exec_instance_num:ノードごとの並列度設定。

現在の並列度設定を確認するには:

SHOW VARIABLES LIKE '%parallel_fragment_exec_instance_num%';

設定するには:

SET parallel_fragment_exec_instance_num = <値>;

HDFS へのエクスポート

必要な HDFS プロパティは、Hadoop クラスターで高可用性(HA)が有効になっているかどうかによって異なります。

高可用性(HA)が無効な Hadoop クラスター

-- fileSystem_port のデフォルト値:9000
SELECT * FROM tbl
INTO OUTFILE "hdfs://${host}:${fileSystem_port}/path/to/result_"
FORMAT AS CSV
PROPERTIES
(
    "fs.defaultFS" = "hdfs://ip:port",
    "hadoop.username" = "work"
);

高可用性(HA)が有効な Hadoop クラスター

-- fileSystem_port のデフォルト値:8020
SELECT * FROM tbl
INTO OUTFILE "hdfs:///path/to/result_"
FORMAT AS CSV
PROPERTIES
(
    "fs.defaultFS" = "hdfs://hacluster/",
    "dfs.nameservices" = "hacluster",
    "dfs.ha.namenodes.hacluster" = "n1,n2",
    "dfs.namenode.rpc-address.hacluster.n1" = "192.168.0.1:8020",
    "dfs.namenode.rpc-address.hacluster.n2" = "192.168.0.2:8020",
    "dfs.client.failover.proxy.provider.hacluster" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
);

結果の合計サイズが 1 GB 以下の場合、SelectDB は単一のファイル result_0.csv を書き込みます。合計サイズが 1 GB を超える場合、複数のセグメントファイル(result_0.csvresult_1.csv など)が書き込まれます。

S3 プロトコル経由での OSS へのエクスポート

中国(杭州)リージョンの OSS バケットに、UNION クエリの結果を Parquet 形式でエクスポートします:

SELECT k1 FROM tbl1 UNION SELECT k2 FROM tbl1
INTO OUTFILE "s3://oss-bucket/result_"
FORMAT AS PARQUET
PROPERTIES
(
    "s3.endpoint" = "oss-cn-hangzhou-internal.aliyuncs.com",
    "s3.access_key" = "****",
    "s3.secret_key" = "****",
    "s3.region" = "cn-hangzhou"
);

並列エクスポートを有効化した OSS へのエクスポート

データを並列でエクスポートします。すべてのリクエストで enable_parallel_outfile セッション変数が使用されます。

SET enable_parallel_outfile = true;

SELECT k1 FROM tb1 LIMIT 1000
INTO OUTFILE "s3://my_bucket/export/my_file_"
FORMAT AS CSV
PROPERTIES
(
    "s3.endpoint" = "oss-cn-hangzhou-internal.aliyuncs.com",
    "s3.access_key" = "****",
    "s3.secret_key" = "****",
    "s3.region" = "cn-hangzhou"
);

クエリに ORDER BY が含まれる場合、enable_parallel_outfile = true であっても、並列エクスポートは自動的に無効になります:

SET enable_parallel_outfile = true;

SELECT k1 FROM tb1 ORDER BY k1 LIMIT 1000
INTO OUTFILE "s3://my_bucket/export/my_file_"
FORMAT AS CSV
PROPERTIES
(
    "s3.endpoint" = "oss-cn-hangzhou-internal.aliyuncs.com",
    "s3.access_key" = "****",
    "s3.secret_key" = "****",
    "s3.region" = "cn-hangzhou"
);

データの型のマッピング

Parquet または ORC へのエクスポート時に、SelectDB はデータの型を、各ファイル形式でサポートされる型に自動的にマッピングします。

SelectDB から ORC へのマッピング

SelectDB の型ORC の型
BOOLEANBOOLEAN
TINYINTTINYINT
SMALLINTSMALLINT
INTINT
BIGINTBIGINT
LARGEINTSTRING
DATESTRING
DATEV2STRING
DATETIMESTRING
DATETIMEV2TIMESTAMP
FLOATFLOAT
DOUBLEDOUBLE
CHAR / VARCHAR / STRINGSTRING
DECIMALDECIMAL
STRUCTSTRUCT
MAPMAP
ARRAYARRAY

SelectDB から Parquet へのマッピング(Apache Arrow 経由)

Parquet エクスポートでは、データが Apache Arrow を経由してルーティングされます。SelectDB の型はまず Arrow の型にマッピングされ、その後 Arrow が Parquet に書き込みます。

SelectDB の型Apache Arrow の型
BOOLEANBOOLEAN
TINYINTINT8
SMALLINTINT16
INTINT32
BIGINTINT64
LARGEINTUTF8
DATEUTF8
DATEV2UTF8
DATETIMEUTF8
DATETIMEV2UTF8
FLOATFLOAT32
DOUBLEFLOAT64
CHAR / VARCHAR / STRINGUTF8
DECIMALDECIMAL128
STRUCTSTRUCT
MAPMAP
ARRAYLIST