これは妥当なアプローチのようです: LOAD の SET 形式を使用し、変数を使用し、UNHEX や CONCAT などの関数を呼び出します。
例えば:
mytable に 4 つの列があるとします。
mysha1 BINARY(20)
a VARCHAR(20)
b VARCHAR(20)
c VARCHAR(20)
列 mysha1 は、'|' で連結された a、b、および c の sha1 ハッシュです。区切りとして。
そして、入力ファイルがそれぞれ 3 つのフィールドのタブ区切りのテキスト行であるとします。
abel\tbaker\tcharlie\t\n
dog\teasy\tfor\t\n
etc\tetc\tetc\t\n
テーブルをロードする方法は次のとおりです
LOAD DATA INFILE '/foo/bar/input.txt' INTO TABLE mytable
FIELDS TERMINATED BY '\t' ESCAPED BY '\\' LINES TERMINATED BY '\n'
(@f1, @f2, @f3) SET mysha1 = UNHEX(SHA1(CONCAT_WS('|', @f1, @f2, @f3))),
a=@f1, b=@f2, c=@f3;
UPDATE : 一般に、SHA1 などの組み込み関数で計算できない任意のバイナリ値の場合、バイナリ値を表示可能な 16 進文字列として INFILE で表現し、@variable に読み取ってから、 UNHEX 関数でバイナリに変換します。例えば:
マイテーブル:
mybin8 BINARY(8)
a VARCHAR(20)
b VARCHAR(20)
c VARCHAR(20)
入力ファイル:
abel\tbaker\tcharlie\t0123456789abcdef\n
dog\teasy\tfox\t2468ace13579bdf\n
etc\tetc\tetc\t0000000000000000\n
ロード コマンド:
LOAD DATA INFILE '/foo/bar/input.txt' INTO TABLE mytable
FIELDS TERMINATED BY '\t' ESCAPED BY '\\' LINES TERMINATED BY '\n'
(a, b, c, @myhex) SET mybin8 = UNHEX(@myhex);