データコンシューマー

このトピックでは、データプロバイダーによって利用可能になった共有からデータベースを作成し、データベースをクエリやその他の操作に使用することに関連するタスクについて説明します。

これらのタスクを実行するには、 ACCOUNTADMIN ロール(またはIMPORT SHARES グローバル権限が付与されたロール)を使用する必要があります。IMPORT SHARES 権限の詳細については、 ACCOUNTADMIN 以外のロールによる、データ共有タスクの実行の有効化 をご参照ください。

注釈

このトピックで説明されているタスクは、リーダーアカウントには適用されません。リーダーアカウントを使用して共有データを使用する場合、これらのタスクはプロバイダーアカウントの管理者によって既に完了しているため、これらのタスクを実行する必要はありません。

このトピックの内容:

共有データベースの一般的な制限

共有データベースには、利用者に対する次の制限があります。

  • 共有データベースは読み取り専用です。コンシューマーアカウントのユーザーは、データを表示/クエリできますが、データの挿入または更新、またはデータベースへのオブジェクトの作成はできません。

  • 次のアクションはサポートされていません。

    • 共有データベースまたはデータベース内のスキーマ/テーブルのクローンの作成。

    • 共有データベースまたはデータベース内のスキーマ/テーブルのTime Travel。

    • 共有データベースのコメントの編集。

  • 共有データベースおよびデータベース内のすべてのオブジェクトは転送できません(つまり、他のアカウントと再共有できます)。

利用可能な共有の表示

ウェブインターフェイスまたは SQLを使用して、アカウントで使用できる共有を表示できます。

ウェブインターフェイス

Shares Shares tab をクリックしてから、 Inbound トグルをクリックします。

このページには、アカウントで使用可能なすべての共有が表示されます。 Database 列には、共有から作成されたデータベースの名前が表示されます。列が空の場合、データベースはまだ共有から(アカウント内に)作成されていません。

SQL

SHOW SHARES または DESCRIBE SHARE ステートメントを実行します。

例えば、 SQLを使用する場合:

SHOW SHARES;

+---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------+
| created_on                      | kind    | name                    | database_name         | to | owner | comment                                     |
|---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------|
| Thu, 15 Jun 2017 17:02:29 -0700 | INBOUND | XY12345.SALES_S         |                       |    |       |                                             |
| Thu, 15 Jun 2017 17:32:44 -0700 | INBOUND | XY12345.SALES_S2        |                       |    |       |                                             |
| Sat, 09 Jul 2016 19:18:09 -0700 | INBOUND | SFC_SAMPLES.SAMPLE_DATA | SNOWFLAKE_SAMPLE_DATA |    |       | Sample data sets provided by Snowflake      |
+---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------+

出力は次のとおりです。

  • 2つの共有、 sales_s および sales_s2 が利用可能です。 kind 列の INBOUND は、データプロバイダーがアカウントで共有を利用できるようにしたことを示しています。

  • name 列には、各共有の完全修飾名が プロバイダーアカウント.共有名 (例: xy12345.sales_s)の形式で表示されます。

  • database_name 列が空の場合、共有から(アカウント内に)データベースがまだ作成されていません。

次の例では、 DESCRIBE SHARE コマンドを使用して、 sales_s 共有にあるオブジェクト(データベース、スキーマ、およびテーブル)を表示します。

DESC SHARE xy12345.sales_s;

+----------+----------------------------------+---------------------------------+
| kind     | name                             | shared_on                       |
|----------+----------------------------------+---------------------------------|
| DATABASE | <DB>                             | Thu, 15 Jun 2017 17:03:16 -0700 |
| SCHEMA   | <DB>.AGGREGATES_EULA             | Thu, 15 Jun 2017 17:03:16 -0700 |
| TABLE    | <DB>.AGGREGATES_EULA.AGGREGATE_1 | Thu, 15 Jun 2017 17:03:16 -0700 |
+----------+----------------------------------+---------------------------------+

共有は、1つのスキーマ aggregates_eula と1つのテーブル aggregate_1 で構成されています。データベース自体を含む各オブジェクト名の先頭には <DB> が付いています。これは、データベースが共有から(アカウント内に)まだ作成されていないことを示します。

共有からのデータベースの作成

ウェブインターフェイスまたは SQLを使用して、共有からデータベースを作成できます。

ウェブインターフェイス
  1. Shares Shares tab をクリックしてから、 Inbound トグルをクリックします。

  2. データベースがまだ作成されていない共有を選択します(つまり、 Database 列は空です)。

  3. Create Database from Share をクリックします。

  4. ダイアログに表示されるプロンプトに従います。

作成時に、システム内の1つ以上のロールに IMPORTED PRIVILEGES 権限を付与するか、後で権限を付与するかを選択できます。

SQL

次のデータ共有固有の構文を使用して CREATE DATABASE ステートメントを実行します。

CREATE DATABASE <name> FROM SHARE <provider_account>.<share_name>

プロバイダーアカウント は共有を提供したアカウントの名前で、 共有名 はデータベースの作成元の共有の名前です。

注釈

  • 共有は、アカウントごとに1回のみ使用できます。

  • データベースを作成する前に共有されているオブジェクトを確認するには、 DESCRIBE SHARE コマンドを使用します。

  • 共有からデータベースを作成した後、他のロールにデータベースへのアクセスを許可するには、インターフェイスの Databases Databases tab ページまたは GRANT <権限> ... TO ROLE コマンドを使用します。

    詳細については、このトピックの 共有データベースでの権限の付与 をご参照ください。

SQL 例

次の例では、アカウントに sales_s 共有から snow_sales という名前の新しいデータベースを作成します。

CREATE DATABASE snow_sales FROM SHARE xy12345.sales_s;

新しい snow_sales データベースをリストします。

SHOW DATABASES LIKE 'snow%';

+---------------------------------+-----------------------+------------+------------+-------------------------+--------------+---------+---------+----------------+
| created_on                      | name                  | is_default | is_current | origin                  | owner        | comment | options | retention_time |
|---------------------------------+-----------------------+------------+------------+-------------------------+--------------+---------+---------+----------------|
| Sun, 10 Jul 2016 23:28:50 -0700 | SNOWFLAKE_SAMPLE_DATA | N          | N          | SFC_SAMPLES.SAMPLE_DATA | ACCOUNTADMIN |         |         | 1              |
| Thu, 15 Jun 2017 18:30:08 -0700 | SNOW_SALES            | N          | Y          | xy12345.SALES_S         | ACCOUNTADMIN |         |         | 1              |
+---------------------------------+-----------------------+------------+------------+-------------------------+--------------+---------+---------+----------------+

この例では、 origin 列は、データベースが作成された共有の完全修飾名を示しています。

同様に、 SHOW SHARES および DESC SHARE の出力には、共有から作成されたデータベースの名前が含まれるようになりました。

SHOW SHARES;

+---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------+
| created_on                      | kind    | name                    | database_name         | to | owner | comment                                     |
|---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------|
| Thu, 15 Jun 2017 17:02:29 -0700 | INBOUND | xy12345.SALES_S         | SNOW_SALES            |    |       |                                             |
| Thu, 15 Jun 2017 17:32:44 -0700 | INBOUND | xy12345.SALES_S2        |                       |    |       |                                             |
| Sat, 09 Jul 2016 19:18:09 -0700 | INBOUND | SFC_SAMPLES.SAMPLE_DATA | SNOWFLAKE_SAMPLE_DATA |    |       | Sample data sets provided by Snowflake      |
+---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------+

DESC SHARE xy12345.sales_s;

+----------+----------------------------------------+---------------------------------+
| kind     | name                                   | shared_on                       |
|----------+----------------------------------------+---------------------------------|
| DATABASE | SNOW_SALES                             | Thu, 15 Jun 2017 17:03:16 -0700 |
| SCHEMA   | SNOW_SALES.AGGREGATES_EULA             | Thu, 15 Jun 2017 17:03:16 -0700 |
| TABLE    | SNOW_SALES.AGGREGATES_EULA.AGGREGATE_1 | Thu, 15 Jun 2017 17:03:16 -0700 |
+----------+----------------------------------------+---------------------------------+

共有テーブルでのテーブルストリームの作成

注釈

共有テーブルでのテーブルストリームのサポートは、 プレビュー機能 として提供されます。

共有テーブルにテーブルストリームを作成すると、それらのテーブルで行われたデータ操作言語( DML )の変更を追跡できます。この機能は、「ローカル」テーブル(つまり、ストリームと同じアカウント)でのストリームの作成と使用に似ています。

共有テーブルにテーブルストリームを作成するには:

  1. IMPORTED PRIVILEGES 権限を持つロールを使用して、共有テーブルにテーブルストリームを作成します。

    CREATE STREAM <name> ON TABLE <shared_db>.<schema>.<table>;
    

    例えば、 snow_sales.aggregates_eula データベースとスキーマの共有 aggregate_1 テーブルにテーブルストリームを作成します。

    CREATE STREAM aggregate_1_stream ON TABLE snow_sales.aggregates_eula.aggregate_1;
    

    ストリームの作成の詳細については、 CREATE STREAM を参照してください。

注釈

ストリームが古くなるのを防ぐには、テーブルの保持期間中にトランザクション内でストリームレコードを消費します。データプロバイダーに連絡して、テーブルのデータ保持期間を確認してください。

ストリームが古くなったかどうかを判断するには、 DESCRIBE STREAM または SHOW STREAMS コマンドを実行します。コマンド出力で、ストリームの STALE 列の値が TRUE の場合、ストリームは古くなっています。

共有データベースでの権限の付与

当初データベースを使用できるのは、共有からデータベースを作成するために使用されるロールのみです。ただし、 IMPORTED PRIVILEGES という名前の特別なデータ共有固有の権限を介して、他のロールにアクセスを許可できます。

ロールは、次のいずれかの場合にのみ、インポートされたデータベースで IMPORTED PRIVILEGES を付与できます。

  • インポートされたデータベースを所有する(つまり、データベースに対する OWNERSHIP 権限を有する)場合。

  • MANAGE GRANTS グローバル権限が付与された場合。

IMPORTED PRIVILEGES の他のロールへの割り当て

ウェブインターフェイスまたは SQL を使用して、このロールを他のロールに割り当てることができます。

ウェブインターフェイス

Databases Databases tab » <共有データベース名> をクリックします。

サイドパネルで Grant Privileges をクリックし、1つ以上のロールに権限を割り当てます。

SQL

GRANT <権限> ... TO ROLE ステートメントを実行します。

共有データベースで USAGE 権限を持つロールを表示するには、ウェブインターフェイスまたは SHOW GRANTS コマンドを使用します。

SQL 例

  1. ロール r1 は、共有 xy12345.sales_s からデータベース snow_sales を作成します。

    use role r1;
    create database snow_sales from share xy12345.sales_s;
    
  2. ロール r1 が、データベース snow_sales の IMPORTED PRIVILEGES をロール r2 に付与します。

    grant imported privileges on database snow_sales to role r2;
    
  3. r2 にはデータベースに対する OWNERSHIP 権限がないため、次の許可または取り消し操作のいずれかを実行できるように、ロール r2 はアカウントに対する MANAGE GRANTS 権限を保持する必要があります。

    use role r2;
    grant imported privileges on database snow_sales to role r3;
    revoke imported privileges on database snow_sales from role r3;
    

共有データベースのクエリ

共有データベースのクエリは、アカウント内の他のデータベースのクエリと同じです。

例:

USE ROLE r1;

USE DATABASE snow_sales;

SELECT * FROM aggregates_1;