説明
このステートメントは、外部からデータをインポートするために使用されます。
OceanBaseデータベースの
LOAD DATAステートメントは、以下の入力ファイルの読み込みをサポートしています:サーバー側(OBServerノード)ファイル:ファイルはOceanBaseデータベースのOBServerノード上にあります。
LOAD DATA INFILEステートメントまたはLOAD DATA FROM URLステートメントを使用して、サーバー側のファイルからデータベーステーブルにデータをロードできます。クライアント側(ローカル)ファイル:ファイルはクライアントのローカルファイルシステム上にあります。
LOAD DATA LOCAL INFILEステートメントまたはLOAD DATA FROM URLステートメントを使用して、クライアントのローカルファイルからデータベーステーブルにデータをロードできます。説明
OceanBaseデータベースが
LOAD DATA LOCAL INFILEコマンドを実行すると、システムは自動的にIGNOREオプションを追加します。OSSファイル:ファイルはOSSファイルシステム上にあります。
LOAD DATA REMOTE_OSS INFILEステートメントを使用して、OSSファイルのデータをデータベーステーブルにロードできます。
LOAD DATAは現在、CSV形式のテキストファイルのインポートをサポートしており、インポートプロセス全体は以下のフローに分けられます:
ファイルの解析:OceanBaseデータベースは、ユーザーが入力したファイル名に基づいてファイルのデータを読み取り、指定された並列度に応じて、入力ファイル内のデータを並列または直列に解析します。
データの分散:OceanBaseは分散型データベースであるため、各パーティションのデータは異なるOBServerノードに分散されている可能性があります。
LOAD DATAは解析されたデータを計算し、データを送信するOBServerノードを決定します。データの挿入:ターゲットとなるOBServerノードがデータを受信すると、ローカルで
INSERT操作を実行し、対応するパーティションにデータを挿入します。
注意点
トリガー(Trigger)を持つテーブルでは、
LOAD DATAステートメントの使用は禁止されています。外部ファイルからデータをインポートするには、
FILE権限と以下の設定が必要です:- サーバー側のファイルをロードする場合、事前にシステム変数secure_file_privを設定し、インポートまたはエクスポートファイルにアクセスできるパスを構成する必要があります。
- クライアント側のローカルファイルをロードする場合、MySQL/OBClient クライアントを起動する際に、
--local-infile[=1]オプションを追加して、ローカルファイルシステムからのデータロード機能を有効にする必要があります。
指定したパーティションのダイレクトロードを使用する場合、ターゲットテーブルはレプリケーションテーブルであってはならず、自動インクリメント列、識別列、グローバルインデックスを含むことはできません。
ダイレクトロード関連の制限 (LOAD DATA構文)
LOAD DATA を APPEND、DIRECT(...) などのヒントやテナントレベルのダイレクトロード設定と組み合わせてインポートを実行する場合、データインポートの概要で説明しているダイレクトロード機能の適用範囲と制限に加え、以下の LOAD DATA ステートメントレベル の制限も満たす必要があります。
- 単一行が2MBを超えるデータのインポートはサポートされていません。
LOAD DATAステートメントは複数行トランザクション内での実行をサポートしており、実行時に先行するトランザクションを自動的にコミットします。- 唯一インデックスを持つテーブルへのフルダイレクトロードでは、重複する唯一インデックスキーが存在する場合、現在
REPLACEまたはIGNOREキーワードをサポートしておらず、フォールトトレランス行の設定もサポートしていません。 DIRECT(...)のload_modeがinc_replaceの値を取る場合、ステートメント内でREPLACEまたはIGNOREキーワードを記述することはできません。
説明
インポートプロセス中に CSVファイル解析エラー が発生した場合、OBServerのインストールパス配下の log サブディレクトリに obloaddata.log ログファイルが生成される可能性があります。型変換失敗、主キー競合 などの場合はこのログファイルには書き込まれません。FROM FILES を使用し、LOG ERRORS 句を指定した場合、失敗行の診断情報の記録方法は、その句および SHOW WARNINGS に準じます。詳細は以下の log_errors を参照してください。
構文
-- 通常ファイルのインポート
LOAD DATA
[/*+ PARALLEL(N) [load_batch_size(M)] [APPEND | direct(bool, int, [load_mode])] | NO_DIRECT */]
[REMOTE_OSS | LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE table_name [PARTITION(PARTITION_OPTION)]
[COMPRESSION [=] {AUTO|NONE|GZIP|DEFLATE|ZSTD}]
[{FIELDS | COLUMNS}
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char']
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number {LINES | ROWS}]
[(column_name_var
[, column_name_var] ...)]
load_mode:
'full'
| 'inc_replace'
PARTITION_OPTION:
partition_option_list
| subpartition_option_list
-- URLファイルのインポート
LOAD DATA
[/*+ PARALLEL(N) [load_batch_size(M)] [APPEND | direct(bool, int, [load_mode])] | NO_DIRECT */]
[REPLACE | IGNORE]
FROM { url_table_function_expr |
( SELECT expression_list FROM url_table_function_expr ) }
INTO TABLE table_name
[PARTITION(PARTITION_OPTION)]
[(column_name_var [, column_name_var] ...)]
[LOG ERRORS [REJECT LIMIT {integer | UNLIMITED}]]
load_mode:
'full'
| 'inc_replace'
url_table_function_expr:
FILES (
LOCATION = '<string>',
{
FORMAT = (
TYPE = 'CSV',
LINE_DELIMITER = '<string>' | <expr>,
FIELD_DELIMITER = '<string>' | <expr>,
PARSE_HEADER = { TRUE | FALSE },
ESCAPE = '<character>' | <expr>,
FIELD_OPTIONALLY_ENCLOSED_BY = '<character>' | <expr>,
ENCODING = 'charset',
NULL_IF = ('<string>' | <expr>, '<string>' | <expr> ...),
SKIP_HEADER = <int>,
SKIP_BLANK_LINES = { TRUE | FALSE },
TRIM_SPACE = { TRUE | FALSE },
EMPTY_FIELD_AS_NULL = { TRUE | FALSE }
)
| FORMAT = ( TYPE = 'PARQUET' | 'ORC' )
},
[PATTERN = '<regex_pattern>']
)
| SOURCE (
TYPE = 'ODPS',
ACCESSID = '<string>',
ACCESSKEY = '<string>',
ENDPOINT = '<string>',
TUNNEL_ENDPOINT = '<string>',
PROJECT_NAME = '<string>',
SCHEMA_NAME = '<string>',
TABLE_NAME = '<string>',
QUOTA_NAME = '<string>',
COMPRESSION_CODE = '<string>'
)
PARTITION_OPTION:
partition_option_list
| subpartition_option_list
パラメータの説明
パラメータ |
説明 |
|---|---|
| parallel(N) | データ読み込みの並列度。デフォルトは4。 |
| load_batch_size(M) | 1回の挿入バッチサイズを指定する。M のデフォルト値は 100 です。推奨範囲は[100,1000]です。 |
| APPEND | direct() |NO_DIRECT | ヒントを使用してダイレクトロード機能を有効にします。
注意ダイレクトロードタスクの実行中は、OceanBaseデータベースのアップグレード操作を同時に行うことは推奨されません。これにより、ダイレクトロードタスクが失敗する可能性があります。
LOAD DATA ダイレクトロードの詳細については、LOAD DATAステートメントを使用したデータ/ファイルのダイレクトロードを参照してください。 |
| REMOTE_OSS | LOCAL | オプション。
|
| file_name | 入力ファイルのパスとファイル名を指定します。file_name には以下の形式があります:
説明OSS上のファイルをインポートする場合、以下の情報を確認する必要があります:
|
| REPLACE | IGNORE | 一意キーの競合が発生した場合、REPLACE は競合行を上書きし、IGNORE は競合行を無視します。LOAD DATA はテーブルの主キーを使用してデータが重複しているかどうかを判断します。テーブルに主キーが存在しない場合、REPLACE と IGNORE オプションの違いはありません。デフォルトでは、競合行を REPLACE で上書きすることも、IGNORE で無視することもありません。一意キーの競合が発生した場合、インポートはエラーで終了する可能性があります。
注意
|
| url_table_function_expr | オプション。FILESとSOURCEの2つのキーワードを使用して、ファイルシステムまたはデータソースからデータを読み取ります。 |
| table_name | データをインポートするテーブル名。
|
| PARTITION_OPTION | パーティションダイレクトロード時のパーティション名を指定します:
説明指定パーティションはダイレクトロードのみをサポートし、通常のLOAD DATAはサポートしません。つまり、ダイレクトロードのヒントを追加しない場合や、ダイレクトロードの構成パラメータを設定しない場合、LOAD DATA実行時に指定パーティションを指定しても無効です。 |
| COMPRESSION | 圧縮ファイル形式を指定します。
|
| FIELDS | COLUMNS | フィールドの形式を指定します。
|
| LINES STARTING BY | 行の開始文字を指定します。 |
| LINES TERMINATED BY | 行の終端文字を指定します。 |
| IGNORE number { LINES | ROWS } | 最初の数行を無視します。LINESはファイルの最初の数行を意味し、ROWSはフィールド区切り文字で指定された最初の数行のデータを意味します。デフォルトでは、入力ファイル内の各フィールドがテーブルの列と1対1で対応付けられます。入力ファイルにすべての列が含まれていない場合、欠けている列は以下のルールに従ってデフォルトで補完されます:
説明複数ファイルをインポートする場合も、単一ファイルをインポートする場合と動作は同じです。 |
| column_name_var | オプションです。インポートする列名を指定します。 |
| LOG ERRORS [REJECT LIMIT {integer | UNLIMITED}] | オプションです。URL外部テーブルのインポート処理中のエラー診断を有効にするために使用します。詳細については、後述のlog_errorsを参照してください。
説明OceanBaseデータベースV4.3.5バージョンでは、LOAD DATAステートメントによるURL外部テーブルのインポート構文は、V4.3.5 BP2バージョンからエラー診断の指定をサポートしています。 |
FILES
FILES キーワードは、LOCATION 句、FORMAT 句、および PATTERN 句で構成されます。
LOCATION句は、外部テーブルファイルの保存先パスを指定するために使用します。通常、外部テーブルのデータファイルは単独のディレクトリに保存され、そのフォルダ内にはサブディレクトリを含むことができます。テーブル作成時、外部テーブルはそのディレクトリ内のすべてのファイルを自動的に収集します。ローカル LOCATION の形式は
LOCATION = '[file:// | sfile://] local_file_path'です。file://:このプロトコルヘッダーは、複数の OBServer ノードで同じ論理パスのファイルに遭遇した場合、それらが異なるファイルとして扱われ、個別に処理されることを示します。各ノードはローカルパス下のファイルを独立して読み取ります。sfile://:このプロトコルヘッダーは、複数の OBServer ノードで同じ論理パスのファイルに遭遇した場合、システムが論理パスに基づいて重複処理を行い、データを1部だけ読み取ることを保証します(マルチサーバーロードバランシングをサポート)。注意
sfile://を使用する場合、システムはファイルサイズの一貫性検証を行います。同じ論理パス下のファイルが異なる OBServer ノードでサイズが一致しない場合、システムはOB_INVALID_EXTERNAL_FILEエラーを返し、データの不整合による結果の誤りを防ぎます。- V4.4.2 バージョンでは、V4.4.2 BP2 から
LOAD DATA構文のローカル Location パス形式にsfile://プロトコルヘッダーのサポートが追加されました。
local_file_path:相対パスまたは絶対パスを指定できます。相対パスを指定する場合、現在のディレクトリは OceanBase データベースのインストールディレクトリである必要があります。secure_file_privは OBServer ノードがアクセス権限を持つファイルパスを設定するために使用されます。local_file_pathはsecure_file_privパスのサブパスである必要があります。
リモート Location の形式は以下のとおりです:
LOCATION = '{oss|cos|S3}://$ACCESS_ID:$ACCESS_KEY@$HOST:s3_region/remote_file_path'。ここで、$ACCESS_ID、$ACCESS_KEY、$HOSTは OSS、COS、S3 アクセスに必要なアクセス情報であり、s3_regionは S3 使用時に選択するリージョン情報です。これらの機密アクセス情報は暗号化され、データベースのシステムテーブルに保存されます。LOCATION = 'hdfs://$ {hdfs_namenode_address}:${port}/PATH.localhost'。ここで、portは HDFS のポート番号を指し、PATHは HDFS 内のディレクトリパスを指します。- Kerberos 認証を使用する場合:
LOCATION = 'hdfs://localhost:port/user?principal=xxx&keytab=xxx&krb5conf=xxx&configs=xxx'。 ここで:principal: ログイン認証ユーザーを指します。keytab: ユーザー認証のキータブファイルパスを指定します。krb5conf: ユーザーが使用する Kerberos 環境の設定ファイルパスを指定します。configs: 追加の HDFS 構成パラメータを指定します。デフォルトは空ですが、Kerberos 環境の場合、通常このパラメータには値があり、設定が必要です。例:dfs.data.transfer.protection=authentication,privacyは、データ転送の保護レベルをauthenticationとprivacyに指定します。
- Kerberos 認証を使用する場合:
注意
オブジェクトストレージパスを使用する場合、オブジェクトストレージパスの各パラメータは
&記号で区切られます。入力するパラメータ値には、英字の大文字と小文字、数字、\/-_$+=およびワイルドカードのみ含まれていることを確認してください。上記以外の文字を入力した場合、設定が失敗する可能性があります。
FORMAT句は、ファイルの読み取り形式に関連するプロパティを指定するために使用され、CSV、PARQUET、ORC の3種類のファイル形式をサポートしています。TYPE = 'CSV' の場合、以下のフィールドが含まれます:
LINE_DELIMITER:CSVファイルの行区切り文字を指定します。デフォルトはLINE_DELIMITER='\n'です。FIELD_DELIMITER:オプションです。CSVファイルの列区切り文字を指定します。デフォルトはFIELD_DELIMITER='\t'です。PARSE_HEADER:オプションです。CSVファイルの最初の行が各列の列名かどうかを指定します。デフォルトはFALSEで、CSVファイルの最初の行を各列の列名として指定しないことを意味します。ESCAPE:CSVファイルのエスケープ文字を指定します。1バイトのみ指定可能です。デフォルトはESCAPE ='\'です。FIELD_OPTIONALLY_ENCLOSED_BY:オプションです。CSVファイルでフィールド値を囲む記号を指定します。デフォルトは空です。このオプションを使用すると、一部の型のフィールド(CHAR、VARCHAR、TEXT、JSON など)にのみ囲み文字が付加されます。ENCODING:ファイルの文字セットエンコーディング形式を指定します。指定しない場合、デフォルト値はUTF8MB4です。NULL_IF:NULLとして処理される文字列を指定します。デフォルト値は空です。SKIP_HEADER:ファイルヘッダーをスキップし、スキップする行数を指定します。SKIP_BLANK_LINES:空白行をスキップするかどうかを指定します。デフォルト値はFALSEで、空白行をスキップしないことを意味します。TRIM_SPACE:ファイル内のフィールドの先頭と末尾のスペースを削除するかどうかを指定します。デフォルト値はFALSEで、ファイル内のフィールドの先頭と末尾のスペースを削除しないことを意味します。EMPTY_FIELD_AS_NULL:空文字列をNULLとして処理するかどうかを指定します。デフォルト値はFALSEで、空文字列をNULLとして処理しないことを意味します。
TYPE = 'PARQUET/ORC' の場合、他の追加フィールドはありません。
PATTERN句は、LOCATIONディレクトリ内のファイルをフィルタリングするための正規表現パターン文字列を指定します。各 LOCATION ディレクトリ内のファイルパスがこのパターン文字列に一致する場合、外部テーブルはそのファイルにアクセスします。一致しない場合は、そのファイルをスキップします。このパラメータを指定しない場合、デフォルトではLOCATIONディレクトリ内のすべてのファイルにアクセスできます。
SOURCE
SOURCE キーワードには他の句が含まれない場合、TYPE = 'ODPS' となり、以下のフィールドがあります:
ACCESSID:ODPSユーザーのIDを指定します。ACCESSKEY:ODPSユーザーのパスワードを指定します。ENDPOINT:ODPSサービスの接続アドレスを指定します。TUNNEL_ENDPOINT:Tunnelデータ転送サービスの接続アドレスを指定します。PROJECT_NAME:クエリ対象のテーブルが存在するProjectを指定します。SCHEMA_NAME:オプションです。クエリ対象のテーブルのSCHEMAを指定します。TABLE_NAME:クエリ対象のテーブル名を指定します。QUOTA_NAME:オプションです。指定されたQuotaの使用を有効にするかどうかを選択します。COMPRESSION_CODE:オプションです。データソースの圧縮形式を指定します。ZLIB、ZSTD、LZ4、ODPS_LZ4の4種類の圧縮形式をサポートしています。設定しない場合、圧縮は有効になりません。
log_errors
LOG ERRORS:インポートプロセス中のエラー診断を有効にし、失敗した行を記録することを許可します(現在のバージョンではwarning bufferに記録され、show warningsコマンドで確認できます。最大64行まで)。これにより、最初のエラーで操作が終了することはありません。REJECT LIMIT句と組み合わせることで、許容される誤り行数を制御できます。REJECT LIMIT: オプションです。許容される最大誤り行数を設定します:- デフォルト値は0です:いかなる誤り行も許可されず、最初の誤りに遭遇した時点で操作が失敗します。
integer:単一マシンで許容される最大誤り行数。例えば、10は1台のマシンで遭遇する誤りが最大10行であることを意味します。UNLIMITED: 無限の誤り行数を許可します。
注意
LOG ERRORS句を指定しない場合、通常のインポート動作となり、最初の誤りに遭遇すると直ちにエラーが報告されます。LOG ERRORS句は指定されているもののREJECT LIMIT句が指定されていない場合、LIMITを0に設定した診断と同等であり、最初の誤りに遭遇すると操作は失敗します。ただし、遭遇した最初の誤りと、診断関連のエラーコード「reject limit reached」が記録されます。複数ファイルダイレクトロード時のワイルドカードのルール
複数ファイルのインポートを容易にするため、ファイルワイルドカード機能が導入されました。これはサーバー側およびOSSファイルのインポートに適用されますが、クライアント側からのファイルインポートには適用されません。
サーバー側でのワイルドカードの使用
マッチングルール:
ファイル名のマッチング:
load data /*+ parallel(20) direct(true, 0) */ infile '/xxx/test.*.csv' replace into table t1 fields terminated by '|';ディレクトリのマッチング:
load data /*+ parallel(20) direct(true, 0) */ infile '/aaa*bb/test.1.csv' replace into table t1 fields terminated by '|';ディレクトリとファイル名の同時マッチング:
load data /*+ parallel(20) direct(true, 0) */ infile '/aaa*bb/test.*.csv' replace into table t1 fields terminated by '|';
注意事項:
マッチするファイルが少なくとも1つ存在しなければなりません。存在しない場合、エラーコード4027が返されます。
load data /*+ parallel(20) direct(true, 0) */ infile '/xxx/test.1*.csv,/xxx/test.6*.csv' replace into table t1 fields terminated by '|';の入力に対して、/xxx/test.1*.csv,/xxx/test.6*.csvは全体一致と見なされます。一致するものがない場合、エラー4027が報告されます。POSIXのGLOB関数がサポートするワイルドカードのみがサポートされています。例えば、
test.6*(6|0).csvやtest.6*({0.csv,6.csv}|.csv)はlsコマンドで検索できても、GLOB関数ではマッチせず、エラー4027が報告されます。
クラウドオブジェクトストレージサービス(
OSS)でのワイルドカードの使用マッチングルール:
ファイル名のマッチング:
load data /*+ parallel(20) direct(true, 0) */ remote_oss infile 'oss://xxx/test.*.csv?host=xxx&access_id=xxx&access_key=xxx' replace into table t1 fields terminated by '|';注意事項:
ディレクトリのマッチングはサポートされていません。例えば、
load data /*+ parallel(20) direct(true, 0) */ remote_oss infile 'oss://aa*bb/test.*.csv?host=xxx&access_id=xxx&access_key=xxx' replace into table t1 fields terminated by '|';はOB_NOT_SUPPORTEDを返します。ファイル名のワイルドカードは
*と?のみをサポートします。他のワイルドカードは入力は可能ですが、結果とマッチしません。
例
説明
LOAD DATAでデータをロードする際には、\Nを使用してNULLを表すことができます。サーバー側ファイルからのデータインポート
例1:サーバー側ファイルからデータをインポートします。
グローバルセキュリティパスを設定します。
obclient> SET GLOBAL secure_file_priv = "/" Query OK, 0 rows affected obclinet> \q Bye説明
secure_file_privはGLOBAL変数であるため、有効にするには\qを実行して終了する必要があります。データベースに再接続した後、外部ファイルからデータをインポートします。
obclient> LOAD DATA INFILE 'test.sql' INTO TABLE t1; Query OK, 0 rows affected
例2:
APPENDヒントを使用してダイレクトロード機能を有効にします。LOAD DATA /*+ PARALLEL(4) APPEND */ INFILE '/home/admin/a.csv' INTO TABLE t;例3:CSV形式ファイルをインポートします。
test1.csvファイルのすべての列をインポートします。load data /*+ direct(true,0) parallel(2)*/ from files( location = "data/csv", format = ( type = 'csv', field_delimiter = ',', parse_header = true, skip_blank_lines = true ), pattern = 'test1.csv') into table t1;data/csvパス配下のtest1.csvファイルからc1、c2列を読み取り、それらをテーブルt1のcol1、col2列にインポートします。load data /*+ direct(true,0) parallel(2)*/ from ( select c1, c2 from files( location = 'data/csv' format = ( type = 'csv', field_delimiter = ',', parse_header = true, skip_blank_lines = true ), pattern = 'test1.csv')) into table t1 (col1, col2);
例4:PARQUET形式ファイルをインポートします。
load data /*+ direct(true,0) parallel(2)*/ from files( location = "data/parquet", format = ( type = 'PARQUET'), pattern = 'test1.parquet') into table t1;例5:ORC形式ファイルをインポートします。
load data /*+ direct(true,0) parallel(2)*/ from files( location = "data/orc", format = ( type = 'ORC'), pattern = 'test1.orc') into table t1;例5:ODPS形式ファイルをインポートします。
load data /*+ direct(true,0) parallel(2)*/ from source ( type = 'ODPS', accessid = '$ODPS_ACCESSID', accesskey = '******', endpoint= '$ODPS_ENDPOINT', project_name = 'example_project', schema_name = '', table_name = 'example_table', quota_name = '', compression_code = '') into table t1;クライアント(ローカル)ファイルからのデータインポート
例1:ローカルファイルからOceanBaseデータベースのテーブルにデータをインポートします。
ターミナルまたはコマンドプロンプトウィンドウを開き、以下のコマンドを入力してクライアントを起動します。
obclient --local-infile -hxxx.xxx.xxx.xxx -P2881 -uroot@mysql001 -p****** -A -Dtest結果は次のとおりです:
Welcome to the OceanBase. Commands end with ; or \g. Your OceanBase connection id is 3221719526 Server version: OceanBase 4.2.2.0 (r100000022023121309-f536833402c6efe9364d5a4b61830a858ef24d82) (Built Dec 13 2023 09:58:18) Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. obclient [test]>注意
LOAD DATA LOCAL INFILE機能を使用するには、V2.2.4以降のバージョンのOBClientクライアントを使用してください。指定バージョンのOBClientクライアントがない場合でも、MySQLクライアントを使用してデータベースに接続できます。クライアントで
LOAD DATA LOCAL INFILEステートメントを実行し、ローカルのデータファイルを読み込みます。obclient [test]> LOAD DATA LOCAL INFILE '/home/admin/test_data/tbl1.csv' INTO TABLE tbl1 FIELDS TERMINATED BY ',';結果は次のとおりです:
Query OK, 3 rows affected Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
例2:COMPRESSIONを設定して圧縮ファイルを直接インポートします。
LOAD DATA LOCAL INFILE '/your/file/lineitem.tbl.gz' INTO TABLE lineitem COMPRESSION GZIP FIELDS TERMINATED BY '|';例3:PARTITIONを指定してパーティションダイレクトロードを実行します。
- パーティションダイレクトロードの指定
load data /*+ direct(true,0) parallel(2) load_batch_size(100) */ infile "$FILE_PATH" into table t1 partition(p0, p1) fields terminated by '|' enclosed by '' lines starting by '' terminated by '\n';- サブパーティションダイレクトロードの指定
load data /*+ direct(true,0) parallel(2) load_batch_size(100) */ infile "$FILE_PATH" into table t1 partition(p0sp0, p1sp1) fields terminated by '|' enclosed by '' lines starting by '' terminated by '\n';OSSファイルからのデータインポート
例1:
direct(bool, int)ヒントを使用してダイレクトロード機能を有効にし、OSS上にあるファイルをダイレクトロードします。load data /*+ parallel(1) direct(false,0)*/ remote_oss infile 'oss://antsys-oceanbasebackup/backup_rd/xiaotao.ht/lineitem2.tbl?host=***.oss-cdn.***&access_id=***&access_key=***' into table lineitem fields terminated by '|' enclosed by '' lines starting by '' terminated by '\n';サーバー側ファイルからURL外部テーブル方式でのデータインポート
注意
例に含まれるIPアドレスに関するコマンドはマスキング処理されています。検証時には、ご自身のマシンの実際のIPアドレスを記入してください。
以下では、外部ファイルがローカルにある場合とOceanBaseデータベースのMySQLモードにある場合の外部テーブル作成手順を例示します。手順は以下の通りです:
- 外部ファイルを準備します。
以下のコマンドを実行し、OBServerノードにログインするマシンの
/home/admin/test_csvディレクトリにcolumn_conv.csvファイルを作成します。[admin@xxx /home/admin/test_csv]# vi column_conv.csvファイルの内容は以下の通りです:
1,short,short 2,long_text,long_text 3,long_text,long_textインポートファイルのパスを設定します。
注意
セキュリティ上の理由から、システム変数
secure_file_privを設定する際は、ローカルのUnixソケット接続を介してデータベースに接続し、このグローバル変数を変更するSQLステートメントを実行する必要があります。詳細については、secure_file_privを参照してください。以下のコマンドを実行し、OBServerノードが存在するマシンにログインします。
```shell ssh admin@10.10.10.1 ```- 以下のコマンドを実行し、ローカルUnixソケット接続を介してテナント
mysql001に接続します。
```shell obclient -S /home/admin/oceanbase/run/sql.sock -uroot@mysql001 -p****** ```- 以下のSQLコマンドを実行し、インポートパスを
/home/admin/test_csvに設定します。
```sql SET GLOBAL secure_file_priv = "/home/admin/test_csv"; ```- テナント
mysql001に再接続します。
例:
obclient -h10.10.10.1 -P2881 -uroot@mysql001 -p****** -A -Ddb_test- テーブル
test_tbl1を作成します。
CREATE TABLE test_tbl1(col1 VARCHAR(5), col2 VARCHAR(5), col3 VARCHAR(5));LOAD DATAステートメントを使用してURL外部テーブル構文をテーブルtest_tbl1にデータをインポートし、エラー診断を指定します。
LOAD DATA FROM FILES( LOCATION = '/home/admin/test_csv', FORMAT = ( TYPE = 'csv', FIELD_DELIMITER = ','), PATTERN = 'column_conv.csv') INTO TABLE test_tbl1 LOG ERRORS REJECT LIMIT UNLIMITED;実行結果は次のとおりです:
Query OK, 1 row affected, 2 warnings Records: 1 Deleted: 0 Skipped: 0 Warnings: 2Warningsを確認します。
SHOW warnings;実行結果は次のとおりです:
+---------+------+----------------------------------------------------------------------------------------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------------------------------------------------------------------------------------+ | Warning | 1406 | fail to scan file column_conv.csv at line 2 for column "db_test"."test_tbl1"."col2", error: Data too long for column | | Warning | 1406 | fail to scan file column_conv.csv at line 3 for column "db_test"."test_tbl1"."col2", error: Data too long for column | +---------+------+----------------------------------------------------------------------------------------------------------------------+ 2 rows in settest_tbl1のデータを確認します。SELECT * FROM test_tbl1;実行結果は次のとおりです:
+------+-------+-------+ | col1 | col2 | col3 | +------+-------+-------+ | 1 | short | short | +------+-------+-------+ 1 row in set
関連ドキュメント
- OceanBaseデータベースへの接続方法の詳細については、接続方法の概要を参照してください。
LOAD DATAステートメントの使用例については、LOAD DATAステートメントを使用したデータのインポートを参照してください。LOAD DATAダイレクトロードの使用例については、LOAD DATAステートメントを使用したデータのダイレクトロードを参照してください。