Amazon Redshift SQL 翻訳ガイド
データ型
ClickHouse と Redshift の間でデータを移動させるユーザーは、ClickHouse が提供するより広範なタイプの範囲にすぐに気づくでしょう。それはまた、制約が少ないです。Redshiftはユーザーに可変長の場合でも可能な文字列の長さを指定するよう要求しますが、ClickHouseはこの制限と負担をユーザーから取り除き、バイトとして文字列をエンコードせずに保存します。したがって、ClickHouse の String 型は制限や長さの指定要件がありません。
さらに、ユーザーは Arrays、Tuples、および Enums を利用できますが、これらは Redshift にはファーストクラスの市民としては存在せず (Arrays/Structs は SUPER
で模倣可能)、ユーザーの一般的な不満の一つです。ClickHouse は、クエリ時またはテーブル内での集約状態の保持も可能にします。これにより、データを通常はマテリアライズドビューを使用して事前に集約し、共通のクエリのクエリパフォーマンスを劇的に改善できます。
以下に、各 Redshift タイプに対する対応する ClickHouse タイプを示します。
Redshift | ClickHouse |
---|---|
SMALLINT | Int8 * |
INTEGER | Int32 * |
BIGINT | Int64 * |
DECIMAL | UInt128 , UInt256 , Int128 , Int256 , Decimal(P, S) , Decimal32(S) , Decimal64(S) , Decimal128(S) , Decimal256(S) - (高精度および可能な範囲) |
REAL | Float32 |
DOUBLE PRECISION | Float64 |
BOOLEAN | Bool |
CHAR | String , FixedString |
VARCHAR ** | String |
DATE | Date32 |
TIMESTAMP | DateTime , DateTime64 |
TIMESTAMPTZ | DateTime , DateTime64 |
GEOMETRY | Geo Data Types |
GEOGRAPHY | Geo Data Types (未発展の部分あり e.g. 座標系なし - 関数でエミュレーション可能) |
HLLSKETCH | AggregateFunction(uniqHLL12, X) |
SUPER | Tuple , Nested , Array , JSON , Map |
TIME | DateTime , DateTime64 |
TIMETZ | DateTime , DateTime64 |
VARBYTE ** | String と Bit および Encoding 関数を組み合わせたもの |
UInt8
, UInt32
, UInt32
および UInt64
を追加でサポートしています。
**ClickHouseのString型はデフォルトでは無制限ですが、特定の長さに制約するには 制約 を使用できます。
DDL構文
ソートキー
ClickHouse と Redshift の両方には「ソートキー」の概念があり、データが保存されるときの順序を定義します。Redshift は SORTKEY
句を使用してソートキーを定義します:
比較すると、ClickHouse は ORDER BY
句を使用してソート順を指定します:
ほとんどの場合、ClickHouse では Redshift と同じソートキーのカラムと順序を使用できます。デフォルトの COMPOUND
タイプを使用している場合は特にそうです。Redshift にデータが追加されると、新しく追加されたデータを再ソートし、クエリプランナーのための統計を更新するために VACUUM
と ANALYZE
コマンドを実行する必要があります。そうでない場合、未ソートの空間が増えます。ClickHouse ではそのようなプロセスは必要ありません。
Redshift はソートキーのためのいくつかの便利な機能をサポートしています。最初のものは自動ソートキー (SORTKEY AUTO
を使用)。これにより、開始するのには適切かもしれませんが、明示的なソートキーは最適な場合に最良のパフォーマンスとストレージ効率を保証します。2つ目は INTERLEAVED
ソートキーで、これはソートキー内のカラムのサブセットに等しい重みを付与し、クエリが1つ以上のセカンダリソートカラムを使用する場合にパフォーマンスを向上させます。ClickHouse は、プロジェクションを明示的にサポートしており、わずかに異なる設定で同じ結果を達成できます。
ユーザーは「主キー」という概念が ClickHouse と Redshift で異なることに注意すべきです。Redshift では、主キーは制約を強制することを目的とした伝統的な RDMS の概念に似ています。しかし、Redshift ではそれらは厳密には強制されず、代わりにクエリプランナーとノード間のデータ配布のためのヒントとして機能します。ClickHouse では、主キーはスパース主インデックスを構築するために使用されるカラムを示し、ディスク上でデータが順序付けられ、圧縮を最大限にし、主インデックスの汚染を避けつつメモリーを無駄にしないようにします。