インポートコマンド:
sqlldr user/password control=test.ctl skip=1 load=200000 errors=100 rows=1000 bindsize=33554432
インポートコマンドパラメータの説明:
user/password //数据库的用户名密码
control //sqlldr控制文件位置
skip=1 //表示跳过第一行,从第二行开始导入
load=200000 //表示并不导入所有的数据,只导入跳过skip参数后的200000条数据
rows=1000 //表示一次加载的行数,默认值为64,此处设置为1000
errors=100 //表示出错100次后,停止加载
bindsize=33554432 //表示每次提交记录缓冲区的大小,默认256k
制御ファイル:
load data
CHARACTERSET 'UTF8' //指定字符集
infile '/home/datafile/test.txt' //指定数据文件绝对路径
append into table test_tab //指定导入库表
fields terminated by ',' ,'optionally enclosed by '|' //字段之间的分隔值为逗号,界定符号为"|"
(
ID, //从数据文件中读取的字段列
DATA_DT Date "yyyy-mm-dd" , //设置日期格式
IMPDATE "to_date('2020-07-03 20:10:37','yyyy-mm-dd hh24:mi:ss')", //插入固定日期格式的值
FLAG constant"open" //constant指定插入默认值"open",不从指定的数据文件中读取
)
制御ファイル関連のパラメーターの詳細な説明:
- データのロード:通常はこれから開始し、その前に次のパラメーターを追加できます。
- UNRECOVERABLE:データが回復不能であることを示します
- RECOVERABLE:データを回復できることを示します
- CONTINUE_LOAD:追加を続けることを意味します
- INFILE:データファイルの場所を示します。値が*の場合、データが制御ファイル内にあることを意味します。この例では、個別のデータファイルはありません。ほとんどのロードでは、データファイルは制御ファイルから分離されています。
- INTO TABLE tbl_name:tbl_nameは、データがロードされるターゲットテーブルです。このテーブルは、SQLLDRコマンドを実行する前に作成されている必要があります。
INTOの前に説明する非常に興味深いパラメータがいくつかあります
。INSERT:テーブルにデータを挿入します。テーブルは空である必要があります。テーブルが空でない場合、SQLLDRコマンドの実行時にエラーが報告されます。デフォルトはINSERTパラメータです。
APPEND:テーブルにデータがあるかどうかに関係なく、テーブルにデータを追加します。
REPLACE:テーブル内のデータを置き換えます。これは、最初にテーブル内のすべてのデータをDELETEしてから、INSERTすることと同じです。
TRUNCATE:REPLACEと似ていますが、テーブル内のデータを削除するためにDELETEメソッドが使用されない点が異なりますが、削除してからINSERTするためにTRUNCATEメソッドが使用されます。 - FIELDS TERMINATED BY "、":文字列のデータ部分の区切り値を設定します。ここでは、コンマ(、)区切りとして設定します。もちろん、データ行の区切り文字である限り、他の表示文字に置き換えることもできます。
(ENAME、JOB、SAL):挿入するテーブルの列名。列名はテーブルの列名と完全に同じである必要があります。列の順序はテーブルの列の順序と異なる場合がありますが、データ部分の列と同じである必要があります。 1対1の対応。 - positionキーワードは、列
position(m:n)の開始位置と終了位置を指定するために使用されます。m番目の文字からn番目の文字までの列値を列値
position(+2:15)として参照します。値を直接指定する方法は絶対値と呼ばれます。オフセット。数値を使用する場合、これは相対オフセットです。つまり、前のフィールドが終了する場所、今回は開始する場所であり、比較的安価な金額で計算を再実行できます。
position(*)char(9):この相対オフセット+タイプと長さの利点は、最初の列の開始位置を指定するだけでよく、他の列は列の長さを指定するだけでよいことです。 - FILLER:制御ファイルでFILLERを指定し、列の値がテーブルにインポートされないことを示します。
- BEGINDATA:以下がロードされるデータであることを示し、INFILEが*として指定されている場合にのみ有効です。