はじめに
DB Browser for SQLiteを用いてCSVのインポートとエクスポートを試してみよう!
インポートはデータの取り込み、エクスポートはデータの出力だにゃ
CSVのインポート
サンプルでは下記のCSV内容をインポートします。
店舗コード,店舗名,開店時間,閉店時間,更新日時
1,東京,1000,2000,2022-05-10 10:30:45
2,岡山,930,1830,2021-12-20 21:10:20
最初に、DB Browser for SQLiteでCSVをインポートする対象のデータベースを開きます。
データベースを開いたら[ファイル] → [インポート] → [CSVファイルからテーブルへ]を選択します。
ファイルを選択する画面になるので、インポートするCSVを選択します。
「CSVファイルをインポート」画面が表示されます。
「先頭行をカラム名に」にチェックを入れると、CSVの1行目の内容をカラム名にします。
「フィールド区切り」はデータとデータの区切りを表す文字を選択できます。
「引用符文字」はデータの始まりと終わりにつける文字を選択できます。
引用符文字がなければ、データの中にカンマが入っていた場合、区切り文字として扱われてしまいます。
引用符文字でデータを囲むことで、データ内のカンマと区切り文字としてのカンマを区別する事ができます。
今回のサンプルではデータ内にカンマを入れていないため、引用符文字をつけていません。
「エンコード」でCSVの文字コードを指定できます。エンコードの指定によっては文字化けに注意が必要です。
「フィールドをトリムする?」にチェックを入れると、データ末尾の空白文字を取り除いてくれます。
「OK」を押下することでインポートが行われます。
なお、「高度な設定」を押下すると下記項目が表示されます。
「データ型検出を無効」は通常インポートしたデータの内容によって自動で型を設定してくれますが、このチェックを入れると型を自動設定しません。
「デフォルト値を無視」は既存テーブルにインポートする際に、データに空白があればデフォルト値を適用しますが、このチェックを入れるとデフォルト値を設定せず空の値を入れます。
「値がない場合中止」はデフォルト値がなく、かつNULLを許容しないカラムに空の値が入る場合にインポートを中止します。
「競合の解決方法」では、キー重複した場合の動作を指定できます。
高度な設定の項目はチェック欄にマウスカーソルを合わせると説明文が表示されます。
インポートが完了すると下記のようにテーブルが作成されました。
「データ型検出を無効」にチェックを入れていないので、データの内容に合わせて型が自動設定されています。
データの中身も正しくインポートされています。
既存のテーブルにCSVインポートする
下記の内容を既存のテーブルにインポートしてみます。
店舗コード,店舗名,開店時間,閉店時間,更新日時
3,広島,900,1900,2022-05-15 12:35:45
4,福岡,900,1930,2022-05-16 7:20:30
CSVのインポート画面まで表示します。
ここでテーブル名を既存テーブルの名前にします。
サンプルの場合「店舗一覧」と言う名前でテーブルを作成済みなので、インポートするテーブル名を同じ名前にします。
インポートすると下記のようにデータが追加されました。
既存テーブルにカラムの数が異なるCSVをインポートする
先ほどのサンプルCSVから更新日時を取り除いたCSVをインポートしてみます。
店舗コード,店舗名,開店時間,閉店時間
3,広島,900,1900
4,福岡,900,1930
エラー表示され、取り込みできませんでした。
カラムの数が同じ場合にのみ取り込み可能のようです。
既存テーブルに型の異なるCSVをインポートする
開店時間にABCという文字列を入れて見ました。
店舗コード,店舗名,開店時間,閉店時間,更新日時
3,広島,900,1900,2022-05-15 12:35:45
4,福岡,ABC,1930,2022-05-16 7:20:30
開店時間フィールドのデータ型はINTEGERです。
SQLiteではデータ型がINTEGERであっても文字列のデータをインポートする事ができます。
試しにインポートした結果、開店時間にABCが入りました。
これはDB Browserfor SQLiteの不具合ではなく、SQLiteの仕様です。
サンプルのように数件のデータのインポートであれば、
通常は数値しか入らないカラムに、文字が混ざってしまっても気付くことができますが、
何千何万件という膨大なデータの場合、文字が混ざっていることに気づかずインポートしてしまい、エラーにならないため意図しないデータになってしまう恐れがあります。
たくさんデータがあると、文字が混ざっているかどうか調べるのが大変だにゃあ・・・
インポートしたレコードごとのデータ型を調べる方法があるよ!
typeofを使用することでデータ型を返します。
where文でtypeof(開店時間) = ‘text’とすることで、数値しか入らないはずのフィールドに文字が入ってしまっているレコードを容易に調べる事ができます。
select 開店時間, typeof(開店時間) as データ型
from 店舗一覧
where typeof(開店時間) = 'text'
まとめ
DB Browser for SQLiteを使用してCSVのデータをインポート方法について解説しました。
- インポートは、取り込みしたいデータベースを開いて[ファイル] → [インポート] → [CSVファイルからテーブルへ]を選択し、
インポートするための適切な条件を設定し、取り込みできる。 - 既存のテーブルに追加でインポートする為には、インポート先のテーブル名を取り込みしたい既存のテーブル名に合わせる。
- 既存のテーブルに追加でインポートするする際、カラムの数が異なればエラーとなりインポートできない。
- データ型が異なるものがあってもエラーなくインポートできるので、意図しないデータが入っていないかチェックが必要。
最後まで見ていただき、ありがとうございます!
お腹が空いたので、胃袋にケーキをインポートするにゃ
使い方間違ってますから!!
データをエクスポートする方法