SQLite データベースに接続し、INSERT および SELECT クエリを実行して、ClickHouse と SQLite 間でデータをやり取りできます。
データベースの作成
CREATE DATABASE sqlite_database
ENGINE = SQLite('db_path')エンジンパラメータ
db_path— SQLiteデータベースファイルへのパス。
データ型のサポート
以下の表は、ClickHouse が SQLite からスキーマを自動推論する際のデフォルトの型マッピングを示しています。
SQLite table engine を使用して、特定の ClickHouse 型でテーブルを明示的に定義した場合、SQLite の TEXT カラムから次の ClickHouse 型をパースできます。
- Date, Date32
- DateTime, DateTime64
- UUID
- Enum8, Enum16
- Decimal32, Decimal64, Decimal128, Decimal256
- FixedString
- すべての整数型 (UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64)
- Float32, Float64
SQLite は動的型付けを採用しており、型アクセス関数では自動的に型変換が行われます。たとえば、TEXT カラムを整数として読み取る場合、そのテキストを数値としてパースできなければ 0 が返されます。つまり、ClickHouse テーブルが基になる SQLite カラムとは異なる型で定義されていると、エラーにならずに値が暗黙的に変換される可能性があります。
特記事項と推奨事項
SQLite は、データベース全体 (定義、テーブル、インデックス、データそのもの) を、ホストマシン上の単一のクロスプラットフォーム対応ファイルとして保存します。書き込み時にはデータベースファイル全体がロックされるため、書き込み操作は順次実行されます。一方、読み取り操作は並行して実行できます。
SQLite では、サービス管理 (起動スクリプトなど) や、GRANT やパスワードに基づくアクセス制御は必要ありません。アクセス制御は、データベースファイル自体に設定されたファイルシステム権限によって行われます。
使用例
SQLite に接続された ClickHouse のデータベース:
CREATE DATABASE sqlite_db ENGINE = SQLite('sqlite.db');
SHOW TABLES FROM sqlite_db;┌──name───┐
│ table1 │
│ table2 │
└─────────┘テーブルを表示します:
SELECT * FROM sqlite_db.table1;┌─col1──┬─col2─┐
│ line1 │ 1 │
│ line2 │ 2 │
│ line3 │ 3 │
└───────┴──────┘ClickHouseテーブルからSQLiteテーブルへデータを挿入する:
CREATE TABLE clickhouse_table(`col1` String,`col2` Int16) ENGINE = MergeTree() ORDER BY col2;
INSERT INTO clickhouse_table VALUES ('text',10);
INSERT INTO sqlite_db.table1 SELECT * FROM clickhouse_table;
SELECT * FROM sqlite_db.table1;┌─col1──┬─col2─┐
│ line1 │ 1 │
│ line2 │ 2 │
│ line3 │ 3 │
│ text │ 10 │
└───────┴──────┘