DorisはMySQLの構文と高い互換性を持ち、標準SQLをサポートしています。ただし、DorisとMySQLの間にはいくつかの違いがあります。以下に概要を示します。
| 型 | MySQL | Doris |
|---|---|---|
| Boolean | - サポート - 範囲: 0はfalse、1はtrueを表す | - サポート - キーワード: Boolean - 範囲: 0はfalse、1はtrueを表す |
| Bit | - サポート - 範囲: 1から64 | サポートされていません |
| Tinyint | - サポート - signed and unsignedをサポート - 範囲: signedは-128から127、unsignedは0から255 | - サポート - signedのみサポート - 範囲: -128から127 |
| Smallint | - サポート - signed and unsignedをサポート - 範囲: signedは-2^15から2^15-1、unsignedは0から2^16-1 | - サポート - signedのみサポート - 範囲: -32768から32767 |
| Mediumint | - サポート - signed and unsignedをサポート - 範囲: signedは-2^23から2^23-1、unsignedは0から2^24-1 | - サポートされていません |
| Int | - サポート - signed and unsignedをサポート - 範囲: signedは-2^31から2^31-1、unsignedは0から2^32-1 | - サポート - signedのみサポート - 範囲: -2147483648から2147483647 |
| Bigint | - サポート - signed and unsignedをサポート - 範囲: signedは-2^63から2^63-1、unsignedは0から2^64-1 | - サポート - signedのみサポート - 範囲: -2^63から2^63-1 |
| Largeint | - サポートされていません | - サポート - signedのみサポート - 範囲: -2^127から2^127-1 |
| Decimal | - サポート - signed and unsignedをサポート(8.0.17以降は非推奨) - デフォルト: Decimal(10, 0) | - サポート - signedのみサポート - デフォルト: Decimal(9, 0) |
| Float/Double | -サポート - signed and unsignedをサポート(8.0.17以降は非推奨) | - サポート - signedのみサポート |
| 型 | MySQL | Doris |
|---|---|---|
| Date | - サポート - 範囲: [‘1000-01-01’, ‘9999-12-31’] - フォーマット: YYYY-MM-DD | - サポート - 範囲: [‘0000-01-01’, ‘9999-12-31’] - フォーマット: YYYY-MM-DD |
| DateTime | - サポート - DATETIME([P])、Pは精度を定義するオプションパラメータ - 範囲: ‘1000-01-01 00:00:00.000000’から‘9999-12-31 23:59:59.999999’ - フォーマット: YYYY-MM-DD hh:mm:ss[.fraction] | - サポート - DATETIME([P])、Pは精度を定義するオプションパラメータ - 範囲: [‘0000-01-01 00:00:00[.000000]’, ‘9999-12-31 23:59:59[.999999]’] - フォーマット: YYYY-MM-DD hh:mm:ss[.fraction] |
| Timestamp | - サポート - Timestamp[(p)]、Pは精度を定義するオプションパラメータ - 範囲: [‘1970-01-01 00:00:01.000000’ UTC, ‘2038-01-19 03:14:07.999999’ UTC] - フォーマット: YYYY-MM-DD hh:mm:ss[.fraction] | - サポート - TIMESTAMPTZ([P])、オプションパラメータPは精度を表す - 範囲: [‘0000-01-01 00:00:00[.000000]’ UTC, ‘9999-12-31 23:59:59[.999999]’ UTC] - フォーマット: YYYY-MM-DD hh:mm:ss[.fraction]+XX:XX |
| Time | - サポート - Time[(p)] - 範囲: [‘-838:59:59.000000’から‘838:59:59.000000’] - フォーマット: hh:mm:ss[.fraction] | - 計算はサポート、ただしOLAPテーブルの列ストレージとしてはサポートされていません - Time[(p)] - 範囲: [‘-838:59:59.999999’から‘838:59:59.999999’] - フォーマット: hh:mm:ss[.fraction] |
| Year | - サポート - 範囲: 1901から2155、または0000 - フォーマット: yyyy | - サポートされていません |
| 型 | MySQL | Doris |
|---|---|---|
| Char | -サポート - CHAR[(M)]、Mは文字長。省略時はデフォルト長は1 - 固定長 - 範囲: [0, 255] バイト | - サポート - CHAR[(M)]、Mはバイト長 - 可変長 - 範囲: [1, 255] |
| Varchar | - サポート - VARCHAR(M)、Mは文字長 - 範囲: [0, 65535] バイト | - サポート - VARCHAR(M)、Mはバイト長 - 範囲: [1, 65533] |
| String | - サポートされていません | - サポート - 1,048,576 バイト (1MB)、2,147,483,643 バイト (2GB)まで増加可能 |
| Binary | - サポート - Charと同様 | - サポートされていません |
| Varbinary | - サポート - Varcharと同様 | - サポートされていません |
| Blob | - サポート - TinyBlob, Blob, MediumBlob, LongBlob | - サポートされていません |
| Text | - サポート - TinyText, Text, MediumText, LongText | - サポートされていません |
| Enum | - サポート - 最大65,535要素をサポート | - サポートされていません |
| Set | - サポート - 最大64要素をサポート | - サポートされていません |
| 型 | MySQL | Doris |
|---|---|---|
| JSON | サポート | サポート |
Dorisにはいくつかの固有のデータ型があります。詳細は以下の通りです:
HyperLogLog
HLL (HyperLogLog) はキー列として使用できないデータ型です。集約モデルテーブルでは、HLLに対応する集約型はHLL_UNIONです。長さとデフォルト値を指定する必要はありません。長さはデータ集約レベルに基づいて内部で制御されます。HLL列はHLL_UNION_AGG、HLL_RAW_AGG、HLL_CARDINALITY、HLL_HASH、およびその他の関連関数でのみクエリまたは使用できます。
HLLは近似ファジー重複除去に使用され、大量のデータを扱う際にcount distinctよりも優れたパフォーマンスを発揮します。HLLの典型的なエラー率は約1%で、時に2%に達することもあります。
Bitmap
Bitmapはキー列として使用できないデータ型です。集約モデルテーブルでは、BITMAPに対応する集約型はBITMAP_UNIONです。HLLと同様に、長さとデフォルト値を指定する必要はなく、長さはデータ集約レベルに基づいて内部で制御されます。Bitmap列はBITMAP_UNION_COUNT、BITMAP_UNION、BITMAP_HASH、BITMAP_HASH64などの関数でのみクエリまたは使用できます。
従来のシナリオでBITMAPを使用すると読み込み速度に影響を与える可能性がありますが、通常、大量のデータを扱う際にCount Distinctよりも優れたパフォーマンスを発揮します。リアルタイムシナリオでは、グローバル辞書を使用せずbitmap_hash()関数とBITMAPを使用すると、約0.1%のエラーが発生する可能性があることに注意してください。このエラーが許容できない場合は、代わりにbitmap_hash64を使用できます。
QUANTILE_PERCENT
QUANTILE_STATEはキー列として使用できないデータ型です。集約モデルテーブルでは、QUANTILE_STATEに対応する集約型はQUANTILE_UNIONです。長さとデフォルト値を指定する必要はなく、長さはデータ集約レベルに基づいて内部で制御されます。QUANTILE_STATE列はQUANTILE_PERCENT、QUANTILE_UNION、TO_QUANTILE_STATEなどの関数でのみクエリまたは使用できます。
QUANTILE_STATEは近似分位値の計算に使用されます。インポート時に、異なる値を持つ同じキーに対して事前集約を実行します。値の数が2048を超えない場合は、すべてのデータを詳細に保存します。値の数が2048を超える場合は、TDigestアルゴリズムを使用してデータを集約(クラスタ化)し、クラスタのセントロイドを保存します。
Array<T>
ArrayはDorisのデータ型で、T型の要素で構成された配列を表します。キー列として使用することはできません。
MAP<K, V>
MAPはDorisのデータ型で、K型とV型の要素で構成されたマップを表します。
STRUCT<field_name:field_type,...>
構造体(STRUCT)は複数のフィールドで構成されます。複数の列のコレクションとしても識別できます。
Agg_State
AGG_STATEはDorisのデータ型で、キー列として使用することはできません。テーブル作成時に、集約関数のシグネチャを宣言する必要があります。
長さとデフォルト値を指定する必要はなく、実際のストレージサイズは関数の実装に依存します。
AGG_STATEは、SQLマニュアルのアグリゲータからSTATE / MERGE/ UNION関数と組み合わせてのみ使用できます。
CREATE TABLE [IF NOT EXISTS] [database.]table ( column_definition_list [, index_definition_list] ) [engine_type] [keys_type] [table_comment] [partition_info] distribution_desc [rollup_list] [properties] [extra_properties]
| パラメータ | MySQLとの違い |
|---|---|
| Column_definition_list | - フィールドリスト定義:基本的な構文はMySQLと似ていますが、集約タイプの追加操作が含まれています。 - 集約タイプ操作は主にAggregateをサポートします。 - テーブル作成時、MySQLではフィールドリスト定義の後にIndex(Primary Key、Unique Keyなど)のような制約を追加できますが、Dorisではデータモデルを定義することでこれらの制約と計算をサポートします。 |
| Index_definition_list | - インデックスリスト定義:基本的な構文はMySQLと似ており、bitmapインデックス、inverted index、N-Gramインデックスをサポートしますが、Bloom filterインデックスはpropertiesを通じて設定されます。 - MySQLはB+TreeとHashインデックスをサポートします。 |
| Engine_type | - テーブルエンジンタイプ:オプション。 - 現在サポートされているテーブルエンジンは主にOLAPネイティブエンジンです。 - MySQLはInnodb、MyISAMなどのストレージエンジンをサポートします。 |
| Keys_type | - データモデル:オプション。 - サポートされるタイプには以下が含まれます:1) DUPLICATE KEY(デフォルト):指定されたカラムはソートカラムです。2) AGGREGATE KEY:指定されたカラムは次元カラムです。3) UNIQUE KEY:指定されたカラムは主キーカラムです。 - MySQLにはデータモデルの概念がありません。 |
| Table_comment | テーブルコメント |
| Partition_info | - パーティショニングアルゴリズム:オプション。Dorisでサポートされているパーティショニングアルゴリズムには以下が含まれます: - LESS THAN:パーティションの上限のみを定義します。下限は前のパーティションの上限によって決定されます。 - FIXED RANGE:パーティションの左閉右開区間を定義します。 - MULTI RANGE:複数のRANGEパーティションを一括作成し、左閉右開区間を定義し、時間単位とステップを設定します。時間単位は年、月、日、週、時間をサポートします。 MySQLはHash、Range、List、Keyなどのアルゴリズムをサポートします。MySQLはサブパーティションもサポートしており、サブパーティションではHashとKeyのみがサポートされています。 |
| Distribution_desc | - バケットアルゴリズム:必須。以下を含みます:1) Hashバケット構文:DISTRIBUTED BY HASH (k1[,k2 ...]) [BUCKETS num|auto]。説明:指定されたキーカラムをHashバケットに使用します。2) ランダムバケット構文:DISTRIBUTED BY RANDOM [BUCKETS num|auto]。説明:ランダム数をバケットに使用します。 - MySQLにはバケットアルゴリズムがありません。 |
| Rollup_list | - テーブル作成時に複数の同期マテリアライズドビューを作成できます。 - 構文: rollup_name (col1[, col2, ...]) [DUPLICATE KEY(col1[, col2, ...])][PROPERTIES("key" = "value")]- MySQLはこれをサポートしません。 |
| Properties | テーブルプロパティ:MySQLのテーブルプロパティとは異なり、テーブルプロパティを定義する構文もMySQLとは異なります。 |
CREATE INDEX [IF NOT EXISTS] index_name ON table_name (column [, ...],) [USING BITMAP];
Dorisは現在、Bitmapインデックス、Invertedインデックス、N-Gramインデックスをサポートしています。BloomFilterインデックスもサポートされていますが、これらには設定用の個別の構文があります。
MySQLはB+TreeやHashなどのインデックスアルゴリズムをサポートしています。
CREATE VIEW [IF NOT EXISTS] [db_name.]view_name (column1[ COMMENT "col comment"][, column2, ...]) AS query_stmt CREATE MATERIALIZED VIEW (IF NOT EXISTS)? mvName=multipartIdentifier (LEFT_PAREN cols=simpleColumnDefs RIGHT_PAREN)? buildMode? (REFRESH refreshMethod? refreshTrigger?)? (KEY keys=identifierList)? (COMMENT STRING_LITERAL)? (PARTITION BY LEFT_PAREN partitionKey = identifier RIGHT_PAREN)? (DISTRIBUTED BY (HASH hashKeys=identifierList | RANDOM) (BUCKETS (INTEGER_VALUE | AUTO))?)? propertyClause? AS query
DorisのALTER構文は基本的にMySQLと同じです。
DorisのDROP構文は基本的にMySQLと同じです。
INSERT INTO table_name [ PARTITION (p1, ...) ] [ WITH LABEL label] [ (column [, ...]) ] [ [ hint [, ...] ] ] { VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }
Doris の INSERT 構文は基本的に MySQL と同じです。
UPDATE target_table [table_alias] SET assignment_list WHERE condition assignment_list: assignment [, assignment] ... assignment: col_name = value value: {expr | DEFAULT}
DorisのUPDATE構文は基本的にMySQLと同じですが、WHERE条件を追加する必要があることに注意してください。
DELETE FROM table_name [table_alias] [PARTITION partition_name | PARTITIONS (partition_name [, partition_name])] WHERE column_name op { value | value_list } [ AND column_name op { value | value_list } ...];
この構文はフィルタ述語のみを指定できます
DELETE FROM table_name [table_alias] [PARTITION partition_name | PARTITIONS (partition_name [, partition_name])] [USING additional_tables] WHERE condition
この構文はUNIQUE KEYモデルテーブルでのみ使用できます。
DorisのDELETE構文は基本的にMySQLと同じです。ただし、Dorisは分析データベースであるため、削除を頻繁に行うことはできません。
SELECT [hint_statement, ...] [ALL | DISTINCT] select_expr [, select_expr ...] [EXCEPT ( col_name1 [, col_name2, col_name3, ...] )] [FROM table_references [PARTITION partition_list] [TABLET tabletid_list] [TABLESAMPLE sample_value [ROWS | PERCENT] [REPEATABLE pos_seek]] [WHERE where_condition] [GROUP BY [GROUPING SETS | ROLLUP | CUBE] {col_name | expr | position}] [HAVING where_condition] [ORDER BY {col_name | expr | position} [ASC | DESC], ...] [LIMIT {[offset_count,] row_count | row_count OFFSET offset_count}] [INTO OUTFILE 'file_name']
DorisのSELECT構文は基本的にMySQLと同じです。
Doris FunctionはほとんどのMySQL関数をカバーしています。
| Name | 有効時の動作 | 無効時の動作 | Notes |
|---|---|---|---|
| PIPES_AS_CONCAT | ||をconcat関数として解析 | ||を論理OR演算子として解析 | - |
| NO_BACKSLASH_ESCAPES | 文字列内のバックスラッシュをリテラル文字として扱う | 文字列内のバックスラッシュをエスケープ文字として扱う | - |
| ONLY_FULL_GROUP_BY | 標準的な集約のみを許可 | GROUP BYキーに含まれないスカラー値が集約結果に現れることを許可 | バージョン3.1.0以降でサポート |