SELECT INTO OUTFILE ステートメントは、一般的に使用されるデータエクスポート方法です。このステートメントでは、エクスポートするフィールドを制限できるため、主キーを含むフィールドをエクスポートする必要がない場合に非常に適しています。また、LOAD DATA INFILE ステートメントと組み合わせてデータをインポートすることで、便利なデータのインポート・エクスポートが可能になります。
背景情報
OceanBaseデータベースはこの構文と互換性があります。
| モード | 推奨されるOceanBaseデータベースバージョン | 推奨されるクライアント |
|---|---|---|
| MySQLモード | V2.2.40以降 | MySQL Client、OBClient |
| Oracleモード | V2.2.40以降 | OBClient |
注意
クライアントはインポートおよびエクスポート操作を実行するために、直接OceanBaseデータベースインスタンスに接続する必要があります。
構文
SELECT column_list_option
INTO OUTFILE file_route_option
[format_of_field_option]
[start_and_end_option]
FROM table_name_list
[WHERE where_conditions]
[GROUP BY group_by_list [HAVING having_search_conditions]]
[ORDER BY order_expression_list]
column_list_option:
column_name[,column_name]...
file_route_option:
'/path/file'
| 'oss://$PATH/$FILENAME/?host=$HOST&access_id=$ACCESS_ID&access_key=$ACCESSKEY'
format_of_field_option:
{FIELDS | COLUMNS}
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char']
start_and_end_option:
LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
| パラメータ | 必須 | 説明 | 例 |
|---|---|---|---|
| column_list_option | はい | エクスポートする列のオプションです。すべてのデータを選択する場合は、* を使用できます。column_name:列名。 |
SELECT col1,col2,col3 ... |
| file_route_option | はい | エクスポート先ファイルパスを選択します。Alibaba Cloud OSSへのエクスポートがサポートされています。
説明Alibaba Cloud OSSにはファイルサイズ制限があるため、5GBを超えるファイルはOSSにエクスポートする際に複数のファイルに分割され、各ファイルは5GB未満になります。 |
... INTO OUTFILE '/home/admin/student.sql' ... |
| format_of_field_option | いいえ | エクスポートフィールドの形式オプションです。出力ファイル内の各フィールドの形式を指定し、FIELDS または COLUMNS 句を使用して指定します。
|
... TERMINATED BY ',' ENCLOSED BY '"' ... |
| start_and_end_option | いいえ | データ行の開始および終了文字のオプションです。出力ファイル内の各行の開始および終了文字を指定し、LINES 句で設定します。
|
... LINES TERMINATED BY '\n' ... は、行が改行文字を終了マークとして使用することを示します。 |
| FROM table_name_list | はい | データを選択する対象を指定します。 | ... FROM tbl1,tbl2 ... |
| WHERE where_conditions | いいえ | 篩選条件を指定し、クエリ結果には条件を満たすデータのみが含まれます。 | ... WHERE col1 > 100 ... |
| GROUP BY group_by_list | いいえ | グループ化するフィールドを指定します。通常は集計関数と組み合わせて使用します。
説明
|
... GROUP BY col1,col2 ... |
| HAVING having_search_conditions | いいえ | グループ化後の各グループデータをフィルタリングします。HAVING 句は WHERE 句と似ていますが、HAVING 句では累積関数(SUM、AVG など)を使用できます。 |
... HAVING SUM(col1) < 160 ... |
| ORDER BY order_expression_list | いいえ | 結果セットを1列または複数の列に基づいてASCまたはDESCで表示するように指定します。ASCまたはDESCを指定しない場合、デフォルトはASCです。
|
... ORDER BY col1,col2 DESC ... |
例
本記事では、データをデバイスのローカルにエクスポートする例を挙げて説明します。
テナント
mysql001のtestデータベースにテーブルtbl1を作成し、データを挿入します。obclient [test]> CREATE TABLE tbl1(col1 INT PRIMARY KEY,col2 varchar(128),col3 INT); Query OK, 0 rows affected obclient [test]> INSERT INTO tbl1 VALUES(1,'one',80),(2,'two',90),(3,'three',100); Query OK, 3 rows affected Records: 3 Duplicates: 0 Warnings: 0 obclient [test]> SELECT * FROM tbl1; +------+-------+------+ | col1 | col2 | col3 | +------+-------+------+ | 1 | one | 80 | | 2 | two | 90 | | 3 | three | 100 | +------+-------+------+ 3 rows in setエクスポートファイルのパスを設定します。
システム変数
secure_file_privを設定して、インポートまたはエクスポートファイルへのアクセスパスを構成します。注意
セキュリティ上の理由により、システム変数
secure_file_privを設定する際は、ローカルソケット経由でデータベースに接続し、このグローバル変数を変更するSQL文を実行する必要があります。詳細については、secure_file_privを参照してください。接続先のOBServerノードにログインします。
[xxx@xxx /home/admin]# ssh admin@xxx.xxx.xxx.xxx以下のコマンドを実行して、ローカルUnixソケット接続方式でテナント
mysql001に接続します。obclient -S /home/admin/oceanbase/run/sql.sock -uroot@mysql001 -p******エクスポートパスを
/home/adminに設定します。obclient [(none)]> SET GLOBAL secure_file_priv = "/home/admin"; Query OK, 0 rows affected
データベースに再接続した後、
SELECT INTO OUTFILEステートメントを使用してテーブルtbl1内のデータをエクスポートします。エクスポートファイル名はtbl1.sqlとします。2つのフィールド値間の区切りとしてカンマを指定します。文字列型の値は"文字で囲みます。終了マークとして改行を使用します。obclient [test]> SELECT * INTO OUTFILE '/home/admin/tbl1.sql' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM tbl1; Query OK, 3 rows affectedマシンにログインし、デバイスのローカル
/home/adminディレクトリでエクスポートされたファイル情報を確認します。[xxx@xxx /home/admin]# cat tbl1.sql 1,"one",80 2,"two",90 3,"three",100
詳細を見る
SELECT INTO OUTFILE メソッドでエクスポートされたファイルは、LOAD DATA ステートメントを使用してインポートできます。詳細な方法については、LOAD DATAを使用したデータのインポートを参照してください。