JSON構造からCREATE TABLEを自動生成する

JSONデータからSQLのCREATE TABLEスキーマを推論する方法を学びます。値からの型推論、nullable検出、主キー選択、方言固有のDDL生成を解説します。

Advanced Patterns

詳細な説明

JSONからCREATE TABLEの推論

JSONデータを挿入する前に、ターゲットテーブルの作成が必要なことが多いです。コンバーターはJSON構造と値の型を分析し、適切なCREATE TABLE文を生成できます。

JSONの例

[
  { "id": 1, "name": "Alice", "email": "alice@example.com", "age": 30, "score": 98.5, "active": true, "bio": null },
  { "id": 2, "name": "Bob", "email": "bob@example.com", "age": null, "score": 87.0, "active": false, "bio": "Developer" }
]

生成されるPostgreSQL DDL

CREATE TABLE users (
    id INTEGER NOT NULL,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL,
    age INTEGER,
    score DOUBLE PRECISION NOT NULL,
    active BOOLEAN NOT NULL,
    bio TEXT,
    PRIMARY KEY (id)
);

型推論ルール

コンバーターは配列全体の各キーのすべての値をスキャンします:

見つかったJSON値 推論されるSQL型
整数のみ INTEGER(2^31を超える場合はBIGINT
小数を含む DOUBLE PRECISION / FLOAT
短い文字列のみ VARCHAR(255)
255文字を超える文字列 TEXT
真偽値のみ BOOLEAN
混合型 TEXT(最も安全なフォールバック)

Nullable検出

いずれかの行でカラムの値がnullであるか、行にそのキーが欠落している場合、カラムはnullableになります。そうでなければNOT NULLが追加されます。

主キーのヒューリスティクス

コンバーターは一般的な主キーパターンをチェックします:

  1. 一意の整数値を持つidという名前のカラム
  2. _idという名前のカラム(MongoDB規約)
  3. 一意の文字列値を持つuuidという名前のカラム

MySQL DDL

CREATE TABLE users (
    id INT NOT NULL,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL,
    age INT DEFAULT NULL,
    score DOUBLE NOT NULL,
    active TINYINT(1) NOT NULL,
    bio TEXT DEFAULT NULL,
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE + INSERTの組み合わせ

コンバーターは両方の文を一緒に生成でき、カラム型が挿入される値と一致することを保証します:

CREATE TABLE IF NOT EXISTS users ( ... );
INSERT INTO users (...) VALUES (...);

ユースケース

JSONデータを受け取りSQLバックエンドが必要な新機能を素早くプロトタイピングする際、CREATE TABLEの自動生成は時間を節約し型の一貫性を保証します。これは特にデータエンジニアが恒久的なスキーマを設計する前に未知のJSONデータセットを調査する場合に便利です。

試してみる — JSON to SQL

フルツールを開く