OracleのSQLLoaderに相当する操作をMySQLで行います。
0.前提
CSV形式の投入データが存在する。
投入先のテーブルが作成されている。
1.CSVデータ投入方法
1 |
LOAD DATA INFILE 'customer.csv' INTO TABLE customer FIElDS TERMINATED BY ','; |
customer.csvをcustomerというテーブルに投入している。
デフォルトでは/var/lib/mysql/<database name> の場所にあるファイルを開こうとする。
そのため、他の場所に置いているファイルを投入するときは、フルパスで指定すること。
例) /home/foo/customer.csv
FIELDS TERMINATED BY ‘,’ はCSVをロードするとき必須。デフォルトはTSV(タブ区切り)。
2.その他のTips
- IGNORE 1 LINES : 1行目にヘッダー(カラム名)が入っている場合に除外できる。 複数行のヘッダがある場合は1を任意の数に変更する。
- 主キーのIDも必ず必要。auto_incrementしていたとしても列は必要となるが、値が入っていないくても良い。
- ENCLOSED BY ‘”‘ : ダブルクォーテーションで囲まれていたら、囲み文字の指定をする。
より複雑な形式のデータを扱う場合は、元のデータを@付変数、投入先のカラムをカラム名で指定することができる。
1 2 |
(<span class="synIdentifier">@1</span>,<span class="synIdentifier">@2</span>,<span class="synIdentifier">@3</span>,<span class="synIdentifier">@4</span>,<span class="synIdentifier">@5</span>,<span class="synIdentifier">@6</span>,<span class="synIdentifier">@7</span>,<span class="synIdentifier">@8</span>,<span class="synIdentifier">@9</span>,<span class="synIdentifier">@10</span>,<span class="synIdentifier">@11</span>,<span class="synIdentifier">@12</span>,<span class="synIdentifier">@13</span>,<span class="synIdentifier">@14</span>,<span class="synIdentifier">@15</span>,<span class="synIdentifier">@16</span>,<span class="synIdentifier">@17</span>,<span class="synIdentifier">@18</span>,<span class="synIdentifier">@19</span>,<span class="synIdentifier">@20</span>,<span class="synIdentifier">@21</span>,<span class="synIdentifier">@22</span>,<span class="synIdentifier">@23</span>,<span class="synIdentifier">@24</span>,<span class="synIdentifier">@25</span>,<span class="synIdentifier">@26</span>,<span class="synIdentifier">@27</span>,<span class="synIdentifier">@28</span>,<span class="synIdentifier">@29</span>,<span class="synIdentifier">@30</span>,<span class="synIdentifier">@31</span>,<span class="synIdentifier">@32</span>,<span class="synIdentifier">@33</span>) SET column1=<span class="synIdentifier">@1</span>, column2=<span class="synIdentifier">@4</span>, column3=<span class="synIdentifier">@20</span>, column4=<span class="synIdentifier">@33</span>; |
ここでは、普通のSQLのようにIF文やCAST(str_to_date)を書くことができる。
3.警告が出たら?
SHOW WARNINGS; で確認できるので、エラーメッセージを見て対応する。
Data truncated for column ‘XXXX’ とあったら、XXXXでデータがテーブル定義をオーバーしている。