Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -89,16 +89,294 @@ ScalarDB Analytics は様々なデータソースにわたって幅広いデー
- `DURATION`
- `INTERVAL`

これらのデータ型はすべてのデータソースで使用され、異種データベースのクエリに統一された型システムを提供します。
### データソース別のカタログ情報マッピング

### データソース統合
データソースを ScalarDB Analytics に登録する際、データソースのカタログ情報(名前空間、テーブル、列など)が解決され、ユニバーサルデータカタログに登録されます。データソースのカタログ情報を解決するために、データソース側の特定のオブジェクトがユニバーサルデータカタログオブジェクトにマッピングされます。このマッピングはカタログレベルのマッピングとデータ型マッピングの2つの部分で構成されています。以下のセクションでは、ScalarDB Analytics が各データソースからカタログレベルとデータ型をユニバーサルデータカタログにどのようにマッピングするかを説明します。

データソースを ScalarDB Analytics に登録する際、2種類のマッピングが行われます:
#### カタログレベルのマッピング

1. **カタログ構造マッピング:** データソースのカタログ情報(名前空間、テーブル、列)が解決され、ユニバーサルデータカタログ構造にマッピングされます
2. **データ型マッピング:** 各データソースのネイティブデータ型が、上記のユニバーサルデータ型にマッピングされます
カタログレベルのマッピングは、データソースから名前空間名、テーブル名、および列名をユニバーサルデータカタログへのマッピングです。各データソースでのカタログレベルのマッピングを確認するには、データソースを選択してください。

これらのマッピングにより、異なるデータベースシステム間での互換性と一貫性が確保されます。特定のデータベースがどのようにマッピングされるかの詳細については、管理ガイドの [カタログメタデータリファレンス](administration.mdx#カタログメタデータリファレンス) を参照してください。
<Tabs groupId="data-source" queryString>
<TabItem value="scalardb" label="ScalarDB" default>
ScalarDB のカタログ情報は ScalarDB Analytics によって自動的に解決されます。カタログレベルのオブジェクトは以下のようにマッピングされます:

- ScalarDB 名前空間は名前空間にマッピングされます。したがって、ScalarDB データソースの名前空間は常に単一レベルで、名前空間名のみで設定されます。
- ScalarDB テーブルはテーブルにマッピングされます。
- ScalarDB 列は列にマッピングされます。

</TabItem>

<TabItem value="postgresql" label="PostgreSQL" default>
PostgreSQL のカタログ情報は ScalarDB Analytics によって自動的に解決されます。カタログレベルのオブジェクトは以下のようにマッピングされます:

- PostgreSQL スキーマは名前空間にマッピングされます。したがって、PostgreSQL データソースの名前空間は常に単一レベルで、スキーマ名のみで設定されます。
- ユーザー定義スキーマのみが名前空間にマッピングされます。以下のシステムスキーマは無視されます:
- `information_schema`
- `pg_catalog`
- PostgreSQL テーブルはテーブルにマッピングされます。
- PostgreSQL 列は列にマッピングされます。

</TabItem>
<TabItem value="mysql" label="MySQL">
MySQL のカタログ情報は ScalarDB Analytics によって自動的に解決されます。カタログレベルのオブジェクトは以下のようにマッピングされます:

- MySQL データベースは名前空間にマッピングされます。したがって、MySQL データソースの名前空間は常に単一レベルで、データベース名のみで設定されます。
- ユーザー定義データベースのみが名前空間にマッピングされます。以下のシステムデータベースは無視されます:
- `mysql`
- `sys`
- `information_schema`
- `performance_schema`
- MySQL テーブルはテーブルにマッピングされます。
- MySQL 列は列にマッピングされます。

</TabItem>
<TabItem value="oracle" label="Oracle">
Oracle のカタログ情報は ScalarDB Analytics によって自動的に解決されます。カタログレベルのオブジェクトは以下のようにマッピングされます:

- Oracle スキーマは名前空間にマッピングされます。したがって、Oracle データソースの名前空間は常に単一レベルで、スキーマ名のみで設定されます。
- ユーザー定義スキーマのみが名前空間にマッピングされます。以下のシステムスキーマは無視されます:
- `ANONYMOUS`
- `APPQOSSYS`
- `AUDSYS`
- `CTXSYS`
- `DBSNMP`
- `DGPDB_INT`
- `DBSFWUSER`
- `DVF`
- `DVSYS`
- `GGSYS`
- `GSMADMIN_INTERNAL`
- `GSMCATUSER`
- `GSMROOTUSER`
- `GSMUSER`
- `LBACSYS`
- `MDSYS`
- `OJVMSYS`
- `ORDDATA`
- `ORDPLUGINS`
- `ORDSYS`
- `OUTLN`
- `REMOTE_SCHEDULER_AGENT`
- `SI_INFORMTN_SCHEMA`
- `SYS`
- `SYS$UMF`
- `SYSBACKUP`
- `SYSDG`
- `SYSKM`
- `SYSRAC`
- `SYSTEM`
- `WMSYS`
- `XDB`
- `DIP`
- `MDDATA`
- `ORACLE_OCM`
- `XS$NULL`

</TabItem>
<TabItem value="sql-server" label="SQL Server">
SQL Server のカタログ情報は ScalarDB Analytics によって自動的に解決されます。カタログレベルのオブジェクトは以下のようにマッピングされます:

- SQL Server データベースとスキーマは共に名前空間にマッピングされます。したがって、SQL Server データソースの名前空間は常に二段階で、データベース名とスキーマ名で構成されます。
- ユーザー定義データベースのみが名前空間にマッピングされます。以下のシステムデータベースは無視されます:
- `sys`
- `guest`
- `INFORMATION_SCHEMA`
- `db_accessadmin`
- `db_backupoperator`
- `db_datareader`
- `db_datawriter`
- `db_ddladmin`
- `db_denydatareader`
- `db_denydatawriter`
- `db_owner`
- `db_securityadmin`
- ユーザー定義スキーマのみが名前空間にマッピングされます。以下のシステムスキーマは無視されます:
- `master`
- `model`
- `msdb`
- `tempdb`
- SQL Server テーブルはテーブルにマッピングされます。
- SQL Server 列は列にマッピングされます。

</TabItem>
<TabItem value="dynamodb" label="DynamoDB">
DynamoDB はスキーマレスであるため、DynamoDB データソースを登録する際に以下のような形式のJSONを使用してカタログ情報を明示的に指定する必要があります:

```json
{
"namespaces": [
{
"name": "<NAMESPACE_NAME>",
"tables": [
{
"name": "<TABLE_NAME>",
"columns": [
{
"name": "<COLUMN_NAME>",
"type": "<COLUMN_TYPE>"
},
...
]
},
...
]
},
...
]
}
```

指定した JSON では、任意の名前空間名を使用できますが、テーブル名は DynamoDB のテーブル名と一致する必要があり、列名と型は DynamoDB のフィールド名と型と一致する必要があります。

</TabItem>
</Tabs>

#### データ型マッピング

基盤となるデータソースのネイティブデータ型は ScalarDB Analytics のデータ型にマッピングされます。各データソースでのデータ型マッピングを確認するには、データソースを選択してください。

<Tabs groupId="data-source" queryString>
<TabItem value="scalardb" label="ScalarDB" default>
| **ScalarDB データ型** | **ScalarDB Analytics データ型** |
|:------------------------------|:---------------------------------|
| `BOOLEAN` | `BOOLEAN` |
| `INT` | `INT` |
| `BIGINT` | `BIGINT` |
| `FLOAT` | `FLOAT` |
| `DOUBLE` | `DOUBLE` |
| `TEXT` | `TEXT` |
| `BLOB` | `BLOB` |
| `DATE` | `DATE` |
| `TIME` | `TIME` |
| `TIMESTAMP` | `TIMESTAMP` |
| `TIMESTAMPTZ` | `TIMESTAMPTZ` |
</TabItem>
<TabItem value="postgresql" label="PostgreSQL" default>
| **PostgreSQL データ型** | **ScalarDB Analytics データ型** |
|:------------------------------|:---------------------------------|
| `integer` | `INT` |
| `bigint` | `BIGINT` |
| `real` | `FLOAT` |
| `double precision` | `DOUBLE` |
| `smallserial` | `SMALLINT` |
| `serial` | `INT` |
| `bigserial` | `BIGINT` |
| `char` | `TEXT` |
| `varchar` | `TEXT` |
| `text` | `TEXT` |
| `bpchar` | `TEXT` |
| `boolean` | `BOOLEAN` |
| `bytea` | `BLOB` |
| `date` | `DATE` |
| `time` | `TIME` |
| `time with time zone` | `TIME` |
| `time without time zone` | `TIME` |
| `timestamp` | `TIMESTAMP` |
| `timestamp with time zone` | `TIMESTAMPTZ` |
| `timestamp without time zone` | `TIMESTAMP` |
</TabItem>
<TabItem value="mysql" label="MySQL">
| **MySQL データ型** | **ScalarDB Analytics データ型** |
|:-----------------------|:---------------------------------|
| `bit` | `BOOLEAN` |
| `bit(1)` | `BOOLEAN` |
| `bit(x)` if *x >= 2* | `BLOB` |
| `tinyint` | `SMALLINT` |
| `tinyint(1)` | `BOOLEAN` |
| `boolean` | `BOOLEAN` |
| `smallint` | `SMALLINT` |
| `smallint unsigned` | `INT` |
| `mediumint` | `INT` |
| `mediumint unsigned` | `INT` |
| `int` | `INT` |
| `int unsigned` | `BIGINT` |
| `bigint` | `BIGINT` |
| `float` | `FLOAT` |
| `double` | `DOUBLE` |
| `real` | `DOUBLE` |
| `char` | `TEXT` |
| `varchar` | `TEXT` |
| `text` | `TEXT` |
| `binary` | `BLOB` |
| `varbinary` | `BLOB` |
| `blob` | `BLOB` |
| `date` | `DATE` |
| `time` | `TIME` |
| `datetime` | `TIMESTAMP` |
| `timestamp` | `TIMESTAMPTZ` |
</TabItem>
<TabItem value="oracle" label="Oracle">
| **Oracle データ型** | **ScalarDB Analytics データ型** |
|:-----------------------------------|:---------------------------------|
| `NUMBER` if *scale = 0* | `BIGINT` |
| `NUMBER` if *scale > 0* | `DOUBLE` |
| `FLOAT` if *precision ≤ 53* | `DOUBLE` |
| `BINARY_FLOAT` | `FLOAT` |
| `BINARY_DOUBLE` | `DOUBLE` |
| `CHAR` | `TEXT` |
| `NCHAR` | `TEXT` |
| `VARCHAR2` | `TEXT` |
| `NVARCHAR2` | `TEXT` |
| `CLOB` | `TEXT` |
| `NCLOB` | `TEXT` |
| `BLOB` | `BLOB` |
| `BOOLEAN` | `BOOLEAN` |
| `DATE` | `DATE` |
| `TIMESTAMP` | `TIMESTAMPTZ` |
| `TIMESTAMP WITH TIME ZONE` | `TIMESTAMPTZ` |
| `TIMESTAMP WITH LOCAL TIME ZONE` | `TIMESTAMP` |
| `RAW` | `BLOB` |
</TabItem>
<TabItem value="sql-server" label="SQL Server">
| **SQL Server データ型** | **ScalarDB Analytics データ型** |
|:---------------------------|:---------------------------------|
| `bit` | `BOOLEAN` |
| `tinyint` | `SMALLINT` |
| `smallint` | `SMALLINT` |
| `int` | `INT` |
| `bigint` | `BIGINT` |
| `real` | `FLOAT` |
| `float` | `DOUBLE` |
| `float(n)` if *n ≤ 24* | `FLOAT` |
| `float(n)` if *n ≥ 25* | `DOUBLE` |
| `binary` | `BLOB` |
| `varbinary` | `BLOB` |
| `char` | `TEXT` |
| `varchar` | `TEXT` |
| `nchar` | `TEXT` |
| `nvarchar` | `TEXT` |
| `ntext` | `TEXT` |
| `text` | `TEXT` |
| `date` | `DATE` |
| `time` | `TIME` |
| `datetime` | `TIMESTAMP` |
| `datetime2` | `TIMESTAMP` |
| `smalldatetime` | `TIMESTAMP` |
| `datetimeoffset` | `TIMESTAMPTZ` |
</TabItem>
<TabItem value="dynamodb" label="DynamoDB">
| **DynamoDB データ型** | **ScalarDB Analytics データ型** |
|:-------------------------|:---------------------------------|
| `Number` | `BYTE` |
| `Number` | `SMALLINT` |
| `Number` | `INT` |
| `Number` | `BIGINT` |
| `Number` | `FLOAT` |
| `Number` | `DOUBLE` |
| `Number` | `DECIMAL` |
| `String` | `TEXT` |
| `Binary` | `BLOB` |
| `Boolean` | `BOOLEAN` |

:::warning

ScalarDB Analytics に指定されたデータ型として `Number` 型のフィールド値が解析可能であることが必要です。例えば、`Number` 型のフィールドに対応する列が `INT` 型として指定されている場合、その値は整数でなければなりません。値が整数でない場合、クエリの実行時にエラーが発生します。

:::

</TabItem>
</Tabs>

## クエリエンジン

Expand Down
Loading