データをファイルからインポート
データを記述した外部のファイルに作成しておきSQLiteから読み込んでテーブルにインポートすることができます。ここでは.importコマンドを使ってデータをインポートする方法について解説します。
1..importコマンドの使い方
2.値の区切り文字の確認と設定
3.インポートされたデータのデータ型
別途用意したファイルからデータを読み込むには「.import」コマンドを使用します。書式は次の通りです。
.import FILE TABLE
1番目の引数にファイル名、2番目の引数に読み込んだデータを追加するテーブル名を指定します。ファイル名はSQLiteのコマンドラインツールを実行したカレントディレクトリからの相対パス又は絶対パスで指定して下さい。
例として「d:\sqlite\data\userdata.txt」というファイルを読み込んで「user」テーブルにインポートする場合は次のように実行します。(下記はカレントディレクトリが「d:\sqlite」の場合です)。
絶対パスの場合: .import d:/sqlite/data/userdata.txt user 相対パスの場合: .import ./data/userdata.txt user
※ Windows環境の場合でも、ファイルの区切り文字は「\」ではなく「/」を使用して下さい。
それではデータの記述方法などについて順次確認していきます。
ファイルにデータを記述する場合、複数のデータをまとめて読み込む場合にはデータ毎に改行して記述して下さい。
データ1 データ2 ・・・
インポート先のテーブルに複数のカラムがあった場合、1行に複数の値を記述していきます。その時、値の区切り文字はデフォルトの設定では「|」を使用します。例えば次のように感じでファイルに記述します。
1|Yoshida|Tokyo 2|Hori|Sapporo 3|Suzuki|Osaka ・・・
区切り文字は変更することが可能です。まず現在区切り文字がどのようになっているのかを確認してみます。「.show」コマンドを実行して下さい。
.show
「separator」の項目を見て頂くと「"|"」と「"\r\n"」が表示されています。カラムの区切りに使用されるのが「"|"」でデータの区切りに使用されるのが改行を表す「"\r\n"」です。
separator: "|" "\r\n"
区切りに使用される文字を変更したい場合には「.separator」コマンドを使います。区切り文字を「,」に変更したい場合には次のように実行して下さい。
.separator ,
設定変更後、改めて「.show」コマンドを実行してみると「separator」の項目が「"," "\r\n"」に変更されていることが確認できます。
区切り文字が「,」になった場合にはデータを記述するファイルは次のような書式となります。
1,Yoshda,Tokyo 2,Hori,Sapporo 3,Suzuki,Osaka ・・・
それでは実際に試してみます。次のようなテーブルを作成しました。
create table staff(id integer, name text, address text);
外部のファイルに記述されたデータを読み込んでこのテーブルにインポートしてみます。ファイルの中身は次の通りです。
1,Yoshda,Tokyo 2,Hori,Sapporo 3,Suzuki, 4,Uchida,Nagoya
このファイルをカレントディレクトリに「staffdata.txt」として保存しました。
次のように「.import」コマンドを使ってデータをstaffテーブルへインポートします。
.import staffdata.txt staff
上記のようにエラーが特に表示されなければインポートは無事完了しています。それではstaffテーブルからデータを取得してみます。
select * from staff;
ファイルに記述されたデータがインポート先にテーブルに格納されていることが確認できます。
データをインポートした場合に、データがTEXT型の値として扱われます。
確認のため、次のようなテーブルを作成しました。このテーブルのカラムにはデータ型を設定していません。
create table staff_nontype(id, name);
次のように記述したファイルを作成し、カレントディレクトリに「typetest.txt」として保存しました。
1,Yoshda 2,Hori 3,Suzuki
「.import」コマンドを使ってstaff_nontypeテーブルへインポートします。(区切り文字は「,」に変更してあります)。
.import typetest.txt staff_nontype
staff_nontypeテーブルのデータをデータ型が分かるように取得します。
select id, typeof(id), name, typeof(name) from staff_nontype;
このように文字列の値だけでなく数値の値もTEXT型となっています。このことからデータをインポートした場合は次のようなSQL文を実行したのと同じような処理が行われていると思われます。
insert into staff_nontype values('1', 'Yoshda'); insert into staff_nontype values('2', 'Hori'); insert into staff_nontype values('3', 'Suzuki');
よってファイルにデータを記述する場合、TEXT型の値だからといって次のようにシングルクオーテーションを付けないように気を付けて下さい。シングルクオーテーションを付けた場合は文字としてのシングルクオーテーションとしてエスケープ処理されて格納されてしまいます。
1,'Yoshda' 2,'Hori' 3,'Suzuki'
----
なお「カラムに格納された値のデータ型の確認」で説明した通り、インポートするテーブルのカラムにデータ型が設定されている場合は適切なデータ型に変更されて保存されます。
データ型をカラムに設定したテーブルを作成し、先ほどと同じデータをインポートしてからデータ型が分かるようにテーブルからデータを取得してみると、「ID」カラムに関してはINTEGER型に変換されて保存されていることが確認できます。
ファイルに記述したデータをインポートする方法について解説しました。
( Written by Tatsuo Ikura )