メインコンテンツまでスキップ
メインコンテンツまでスキップ

Amazon Redshift SQL 翻訳ガイド

データ型

ClickHouse と Redshift の間でデータを移動させるユーザーは、ClickHouse が提供するより広範なタイプの範囲にすぐに気づくでしょう。それはまた、制約が少ないです。Redshiftはユーザーに可変長の場合でも可能な文字列の長さを指定するよう要求しますが、ClickHouseはこの制限と負担をユーザーから取り除き、バイトとして文字列をエンコードせずに保存します。したがって、ClickHouse の String 型は制限や長さの指定要件がありません。

さらに、ユーザーは Arrays、Tuples、および Enums を利用できますが、これらは Redshift にはファーストクラスの市民としては存在せず (Arrays/Structs は SUPER で模倣可能)、ユーザーの一般的な不満の一つです。ClickHouse は、クエリ時またはテーブル内での集約状態の保持も可能にします。これにより、データを通常はマテリアライズドビューを使用して事前に集約し、共通のクエリのクエリパフォーマンスを劇的に改善できます。

以下に、各 Redshift タイプに対する対応する ClickHouse タイプを示します。

RedshiftClickHouse
SMALLINTInt8 *
INTEGERInt32 *
BIGINTInt64 *
DECIMALUInt128, UInt256, Int128, Int256, Decimal(P, S), Decimal32(S), Decimal64(S), Decimal128(S), Decimal256(S) - (高精度および可能な範囲)
REALFloat32
DOUBLE PRECISIONFloat64
BOOLEANBool
CHARString, FixedString
VARCHAR **String
DATEDate32
TIMESTAMPDateTime, DateTime64
TIMESTAMPTZDateTime, DateTime64
GEOMETRYGeo Data Types
GEOGRAPHYGeo Data Types (未発展の部分あり e.g. 座標系なし - 関数でエミュレーション可能)
HLLSKETCHAggregateFunction(uniqHLL12, X)
SUPERTuple, Nested, Array, JSON, Map
TIMEDateTime, DateTime64
TIMETZDateTime, DateTime64
VARBYTE **StringBit および Encoding 関数を組み合わせたもの
* ClickHouseは、範囲の拡張された符号なし整数 i.e. UInt8, UInt32, UInt32 および UInt64を追加でサポートしています。
**ClickHouseのString型はデフォルトでは無制限ですが、特定の長さに制約するには 制約 を使用できます。

DDL構文

ソートキー

ClickHouse と Redshift の両方には「ソートキー」の概念があり、データが保存されるときの順序を定義します。Redshift は SORTKEY 句を使用してソートキーを定義します:

CREATE TABLE some_table(...) SORTKEY (column1, column2)

比較すると、ClickHouse は ORDER BY 句を使用してソート順を指定します:

CREATE TABLE some_table(...) ENGINE = MergeTree ORDER BY (column1, column2)

ほとんどの場合、ClickHouse では Redshift と同じソートキーのカラムと順序を使用できます。デフォルトの COMPOUND タイプを使用している場合は特にそうです。Redshift にデータが追加されると、新しく追加されたデータを再ソートし、クエリプランナーのための統計を更新するために VACUUMANALYZE コマンドを実行する必要があります。そうでない場合、未ソートの空間が増えます。ClickHouse ではそのようなプロセスは必要ありません。

Redshift はソートキーのためのいくつかの便利な機能をサポートしています。最初のものは自動ソートキー (SORTKEY AUTO を使用)。これにより、開始するのには適切かもしれませんが、明示的なソートキーは最適な場合に最良のパフォーマンスとストレージ効率を保証します。2つ目は INTERLEAVED ソートキーで、これはソートキー内のカラムのサブセットに等しい重みを付与し、クエリが1つ以上のセカンダリソートカラムを使用する場合にパフォーマンスを向上させます。ClickHouse は、プロジェクションを明示的にサポートしており、わずかに異なる設定で同じ結果を達成できます。

ユーザーは「主キー」という概念が ClickHouse と Redshift で異なることに注意すべきです。Redshift では、主キーは制約を強制することを目的とした伝統的な RDMS の概念に似ています。しかし、Redshift ではそれらは厳密には強制されず、代わりにクエリプランナーとノード間のデータ配布のためのヒントとして機能します。ClickHouse では、主キーはスパース主インデックスを構築するために使用されるカラムを示し、ディスク上でデータが順序付けられ、圧縮を最大限にし、主インデックスの汚染を避けつつメモリーを無駄にしないようにします。