ストレージ・タイプ指定のSQL構文

このセクションでは、テーブルとデータベースの両方のレベルでデータソースのストレージタイプを指定および管理するための NPS SQL 構文の拡張について説明します。 これらの改善により、既存のレイクハウスの機能と同様に、ストレージオプションをより柔軟に設定できるようになった。

一度テーブルを作成すると、 既存のテーブルのストレージ・タイプを変更することはできません。 回避策としては、CTAS(Create Table As Select)を使用して新しいテーブルを作成し、必要なストレージタイプを指定した後、元のテーブルを削除する方法があります。

データベースレベルの設定

  • ユーザは、 データベース・ レベルでデフォルトのstoragetypeを設定および変更できる。
  • これにより、個々のテーブルレベルで上書きされない限り、データベース内のすべてのテーブルで一貫したストレージ動作が可能になる。

デフォルトのストレージタイプ

デフォルトのstoragetypeはシステムレベルで「block」に設定されている。 コンソールから変更できます。

テーブル作成時のストレージタイプの優先順位

テーブルを作成する際、システムは以下の優先順位に基づいてストレージタイプを決定する:

  1. CREATE TABLE ステートメント
  2. セッションレベルの設定
  3. データベースレベルの設定
  4. システム全体の設定

最初に優先されるのは、 CREATE TABLE。 ステートメント内で storagetype が明示的に指定されていない場合、システムはセッションレベルの設定が適用されているかどうかをチェックします。 そうでない場合は、データベース・レベルで設定されたデフォルトのストレージ・タイプを探す。 データベース・レベルの設定が "default" の場合、システム全体の DEFAULT_STORAGE_TYPE が使用される。

テーブル・ストレージ・タイプの表示

テーブルのストレージ・タイプを調べるには、 _v_table システム・ビューに問い合わせる:

SELECT TABLENAME, STORAGESOURCE, CASE WHEN STORAGESOURCE = 1 THEN 'BLOCK' WHEN STORAGESOURCE = 2 THEN 'OBJECT' END AS STORAGETYPE FROM _v_table WHERE TABLENAME like 'TEST_%';

テーブルのstoragetypeはシステム・ビュー_v_tableから決定できる。 ここで、1は block を表し、2は object を表す。

| TABLENAME | STORAGESOURCE | STORAGETYPE |
|-----------|---------------|-------------|
| TEST_OBJ  | 2             | OBJECT      |
| TEST_BLK  | 1             | BLOCK       |

一度テーブルを作成すると、 storagetype変更することはできない。 テーブルを別のストレージ・タイプにコピーするには、次のように CTAS(Create Table As Select) ステートメントを使用する:

CREATE TABLE t3 AS (SELECT * FROM t1) STORAGETYPE 'block';

SELECT を括弧で囲む必要がある

マテリアライズド・ビューに storagetype指定することはできません。 ストレージ・タイプはベース・テーブルから継承される

ブロック・ストレージのみをサポートするリリースからオブジェクト・ストレージをサポートするリリースへのアップグレード中、既存のすべてのテーブルの storagetype'block' に設定されます。

データベースに storagetype を設定する

特定のデータベースで作成されたテーブルに適用されるデフォルトの格納形式は、データベースの作成時に指定することができます。

  1. CREATE DATABASE 声明
  2. セッションレベルの設定
  3. システム全体の設定

データベースの作成時に、デフォルトの storagetype を設定することができます:

CREATE DATABASE database1 STORAGETYPE 'block';

storagetype指定されていない場合、システムはそうする:

  • セッションレベルの設定をチェックする。
  • 見つからない場合は、 システム全体のデフォルトを使用する。
  • そしてこの値は、データベースのデフォルト storagetype として内部に保存される。

データベース・レベルでデフォルトを未設定のままにするには、次のようにする:

CREATE DATABASE database1 STORAGETYPE 'default';

データベースのデフォルト storagetype を確認するには、 _v_database システム・ビューに問い合わせる:

SELECT DATABASE, STORAGETYPE FROM _v_database;

出力例:

 DATABASE |  STORAGETYPE
----------+----------------
 DB1      | BLOCK
 DB2      | OBJECT
 SYSTEM   | SYSTEM DEFAULT
(3 rows)

ブロック・ストレージのみをサポートするリリースからオブジェクト・ストレージをサポートするリリースへのアップグレード中、既存のすべてのデータベースのデフォルト storagetype は、 'block' に設定されます。

データベースに関連付けられたデフォルトの storagetype は、 ALTER DATABASE コマンドを使って変更することができる。

  • データベース・ストレージ・タイプの変更

    ALTER DATABASE <database_name> STORAGETYPE '<storage_type>';