このトピックでは、AnalyticDB for MySQL Data Warehouse Edition を使用して作業を開始する方法について説明します。 AnalyticDB for MySQL は、ペタバイト規模の高並列データを実時間で処理できるオンライン分析処理 (OLAP) ウェアハウスサービスです。このトピックでは、AnalyticDB for MySQL Data Warehouse Edition クラスタを使用する手順について説明します。
Data Warehouse Edition は購入できません。Enterprise Edition または Basic Edition クラスタを購入できます。既存の Data Warehouse Edition クラスタの使用方法については、このトピックを参照してください。
使用プロセス
AnalyticDB for MySQL Data Warehouse Edition を初めて使用する場合は、以下のトピックを読むことをお勧めします。
製品紹介: AnalyticDB for MySQL の用語、メリット、およびシナリオについて説明します。
料金: AnalyticDB for MySQL の料金と課金方法について説明します。
作業の開始 (このトピック): AnalyticDB for MySQL Data Warehouse Edition クラスタの使用方法について説明します。
次の図は、AnalyticDB for MySQL Data Warehouse Edition を使用するプロセスを示しています。
ステップ 1: データベースアカウントを作成する
AnalyticDB for MySQL は、2 種類のデータベースアカウント、特権アカウントと標準アカウントをサポートしています。特権アカウントと標準アカウントの違いについては、「データベースアカウントを作成する」トピックの「アカウントタイプ」セクションを参照してください。
特権アカウントを作成する
AnalyticDB for MySQL コンソール にログインします。コンソールの左上隅で、リージョンを選択します。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。 クラスターリスト ページで、エディションタブをクリックします。管理するクラスタを見つけて、クラスタ ID をクリックします。
左側のナビゲーションウィンドウで、アカウント管理 をクリックします。
アカウント管理 タブで、[特権アカウントの作成] をクリックします。
アカウントの作成 パネルで、次の表に示すパラメータを設定します。
パラメータ
説明
データベースアカウント
特権アカウントの名前。画面上の要件を満たす名前を入力します。
アカウントタイプ
アカウントタイプ。 Data Warehouse Edition クラスタの場合、このパラメータは自動的に 高特権アカウント に設定されます。
新しいパスワード
特権アカウントのパスワード。画面上の要件を満たすパスワードを入力します。
パスワードの確認
特権アカウントのパスワードをもう一度入力します。
記述
オプション。今後の管理のためにアカウントを識別するために使用される説明。
を決定 をクリックします。
標準アカウントを作成して権限を付与する
SQL 文を実行して作成された標準アカウントは、コンソールに表示されません。
データベースアカウントの作成方法については、「CREATE USER」を参照してください。
データベースアカウントに権限を付与する方法については、「GRANT」を参照してください。
データベースアカウントから権限を取り消す方法については、「REVOKE」を参照してください。
データベースアカウントの名前を変更する方法については、「RENAME USER」を参照してください。
データベースアカウントを削除する方法については、「DROP USER」を参照してください。
ステップ 2: IP アドレスホワイトリストを設定する
AnalyticDB for MySQL クラスタのデフォルトの IP アドレスホワイトリストには、デフォルトの IP アドレス 127.0.0.1 のみ含まれています。これは、どのデバイスもクラスタにアクセスできないことを示しています。クラスタへの他のデバイスのアクセスを許可するには、IP アドレスホワイトリストを設定できます。たとえば、10.10.10.0/24 を指定すると、10.10.10.x のすべての IP アドレスがクラスタにアクセスできるようになります。複数の IP アドレスまたは CIDR ブロックを追加する場合は、複数のエントリをコンマ (,) で区切ります。コンマの前後にスペースを追加しないでください。例: 192.168.0.1,172.16.213.9。
警告IP アドレス 0.0.0.0 はホワイトリストでは許可されていません。
パブリック IP アドレスが頻繁に変更され、すべてのパブリック IP アドレスが AnalyticDB for MySQL クラスタにアクセスできるようにする場合は、テクニカルサポートにお問い合わせください。
AnalyticDB for MySQL クラスタに対してきめ細かいアクセス制御を有効にするには、IP アドレスホワイトリストを設定できます。ホワイトリストは定期的に更新することをお勧めします。
ホワイトリストの設定は、AnalyticDB for MySQL クラスタの実行には影響しません。IP アドレスホワイトリストの変更は 1 分で有効になります。
手順
AnalyticDB for MySQL コンソール にログインします。コンソールの左上隅で、リージョンを選択します。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。 クラスターリスト ページで、エディションタブをクリックします。管理するクラスタを見つけて、クラスタ ID をクリックします。
左側のナビゲーションウィンドウで、データセキュリティ をクリックします。
ホワイトリストの設定 タブで、変更デフォルト ホワイトリストの右側にある をクリックします。
説明ホワイトリスト作成グループ をクリックして、IP アドレスホワイトリストを作成することもできます。
ホワイトリストグループの設定 パネルで、デフォルトの IP アドレス 127.0.0.1 を削除し、許可する IP アドレスまたは CIDR ブロックを入力します。次に、を決定 をクリックします。
説明クライアントのエグレス IP アドレスを IP アドレスホワイトリストに追加するには、最初に IP アドレスをクエリします。詳細については、「接続」を参照してください。
ステップ 3: AnalyticDB for MySQL クラスタに接続する
Data Management (DMS)、ビジネスインテリジェンス (BI) 可視化ツール、MySQL コマンドラインツール、または Navicat for MySQL、DBeaver、DbVisualizer、SQL Workbench/J などの MySQL クライアントを使用して、AnalyticDB for MySQL クラスタに接続できます。AnalyticDB for MySQL また、AnalyticDB for MySQL クラスタのエンドポイント、ポート、データベースアカウントなどの情報をアプリケーションに入力して、クラスタに接続することもできます。
DMS を使用して AnalyticDB for MySQL に接続するAnalyticDB for MySQL
AnalyticDB for MySQL コンソール にログインします。コンソールの左上隅で、リージョンを選択します。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。 クラスターリスト ページで、エディションタブをクリックします。管理するクラスタを見つけて、クラスタ ID をクリックします。
クラスター情報 ページの右上隅にある ログインデータベース をクリックします。
表示されるダイアログボックスで、次の表に示すパラメータを設定します。
パラメータ
説明
[データベースタイプ]
クラスタのデータベースタイプ。デフォルトでは、[analyticdb Mysql 3.0] が表示されます。
[インスタンスリージョン]
クラスタのリージョン。デフォルトでは、クラスタが存在するリージョンが表示されます。
説明AnalyticDB for MySQL
[インスタンス ID]
クラスタ ID。デフォルトでは、現在のクラスタの ID が表示されます。
説明AnalyticDB for MySQL
[データベースアカウント]
クラスタへの接続に使用するデータベースアカウントの名前。
[データベースパスワード]
クラスタへのログインに使用するデータベースアカウントのパスワード。
説明[パスワードを記憶する] を選択できます。これにより、次回現在のAnalyticDB for MySQL クラスタに接続するときに、データベースアカウントの名前とパスワードを入力する必要はありません。
説明DMS を使用して AnalyticDB for MySQL クラスタに初めて接続すると、クラスタ内のデータは [柔軟な管理] モードで管理されます。クラスタを編集することで、制御モードを変更できます。詳細については、「データベースインスタンスの変更」および「制御モード」を参照してください。
パラメータを設定した後、ダイアログボックスの左下隅にある [接続テスト] をクリックできます。接続に失敗した場合は、手順に従って、[データベースアカウント] や [データベースパスワード] パラメータなど、入力した情報を確認してください。
DMS サーバーの IP アドレスまたは CIDR ブロックは、クラスタの IP アドレスホワイトリストに自動的に追加されます。IP アドレスまたは CIDR ブロックが追加に失敗した場合は、手動で IP アドレスまたは CIDR ブロックを追加する必要があります。詳細については、このトピックの「ステップ 2: IP アドレスホワイトリストを設定する」セクションと、「DMS の IP アドレスと CIDR ブロックをセキュリティ設定に追加する」を参照してください。
[ログイン] をクリックします。
アプリケーション開発中にコードを使用して AnalyticDB for MySQL に接続する
MySQL コマンドラインツールを使用して AnalyticDB for MySQL に接続する
クライアントを使用して AnalyticDB for MySQL に接続する
データ可視化ツールを使用して AnalyticDB for MySQL に接続する
ステップ 4: データベースを作成する
AnalyticDB for MySQL クラスタごとに最大 2,048 個のデータベースを作成できます。
[INFORMATION_SCHEMA] システムデータベースを選択し、[SQL コンソール] タブで CREATE DATABASE を入力します。
構文:
CREATE DATABASE [IF NOT EXISTS] $db_name
。パラメータの説明:
db_name
パラメータは、作成するデータベースの名前を指定します。名前は最大 64 文字で、文字、数字、アンダースコア (_) を使用できます。名前は小文字で始まり、連続したアンダースコア (_) を含めることはできません。説明データベース名として analyticdb を使用しないでください。 analyticdb という名前は組み込みデータベース用に予約されています。
例:
create database adb_demo;
create database if not exists adb_demo2;
[SQL コンソール] タブの左上隅にある [実行] をクリックします。データベースが作成されます。
ステップ 5: データのインポートとクエリ
前提条件
Object Storage Service (OSS) バケットにディレクトリを作成して、AnalyticDB for MySQL クラスターからインポートされたデータを格納するには、次の操作を実行します。
OSS をアクティブ化します。詳細については、「OSS をアクティブ化する」をご参照ください。
OSS バケットを作成します。詳細については、「バケットを作成する」をご参照ください。
重要OSS バケットが AnalyticDB for MySQL クラスターと同じリージョンにあることを確認してください。
ディレクトリを作成します。詳細については、「ディレクトリを管理する」トピックの「ディレクトリを作成する」セクションをご参照ください。
オブジェクトをアップロードします。詳細については、「オブジェクトをアップロードする」をご参照ください。
この例では、
oss_import_test_data.txt
オブジェクトが OSS の<bucket-name>.oss-cn-hangzhou.aliyuncs.com/adb/
ディレクトリにアップロードされます。行区切り文字は改行、列区切り文字はセミコロン(;)です。次のコードは、このオブジェクトに含まれるデータの一部を示しています。uid;other 12;hello_world_1 27;hello_world_2 28;hello_world_3 33;hello_world_4 37;hello_world_5 40;hello_world_6 ...
AnalyticDB for MySQL クラスターが作成されます。クラスターには IP アドレスのホワイトリストが構成されています。クラスターのデータベースアカウントとデータベースが作成されます。詳細については、「Data Warehouse Edition を使い始める手順」をご参照ください。
手順
CREATE TABLE 文を実行して、
adb_demo
データベースに外部テーブルを作成します。CSV、Parquet、または TEXT 形式のオブジェクトの OSS 外部テーブルを作成する方法については、このトピックの「OSS 外部テーブルを作成するための構文」セクションを参照してください。OSS データをクエリします。
外部テーブルのデータを、AnalyticDB for MySQL の内部テーブルのデータにクエリを実行する場合と同じ方法でクエリを実行できます。例:
select uid, other from oss_import_test_external_table where uid < 100 limit 10;
オブジェクトが CSV または TEXT フォーマットで、大量のデータが含まれている場合は、データをクエリする前に、AnalyticDB for MySQL にインポートすることをお勧めします。そうしないと、クエリのパフォーマンスが低下する可能性があります。
オブジェクトが Parquet フォーマットの場合、データを直接クエリするか、データをクエリする前にオブジェクトを AnalyticDB for MySQL にインポートするかを決定できます。
CREATE TABLE 文を実行して、
adb_oss_import_test
という名前のデスティネーションテーブルをadb_demo
データベースに作成し、OSS からインポートされたデータを格納します。CREATE TABLE IF NOT EXISTS adb_oss_import_test ( uid string, other string ) DISTRIBUTED BY HASH(uid);
INSERT 文を実行して、OSS 外部テーブルから AnalyticDB for MySQL にデータをインポートします。
重要デフォルトでは、
INSERT INTO
文とINSERT OVERWRITE SELECT
文はデータを同期的にインポートします。数百ギガバイトのデータをインポートする場合、クライアントは AnalyticDB for MySQL サーバーとの接続を長時間にわたって維持する必要があります。このプロセス中に、ネットワークの切断が原因でインポートが失敗する可能性があります。そのため、大量のデータをインポートする場合は、SUBMIT JOB INSERT OVERWRITE SELECT
文を実行してデータを非同期的にインポートすることをお勧めします。方法 1:
INSERT INTO
文を実行してデータをインポートします。プライマリキーに重複する値がある場合、データは繰り返し挿入されず、INSERT INTO 文はINSERT IGNORE INTO
文と同じです。詳細については、「INSERT INTO」をご参照ください。INSERT INTO adb_oss_import_test SELECT * FROM oss_import_test_external_table;
方法 2:INSERT OVERWRITE 文を実行してデータをインポートします。プライマリキーに重複する値がある場合、元の値は新しい値で上書きされます。
INSERT OVERWRITE adb_oss_import_test SELECT * FROM oss_import_test_external_table;
方法 3:
INSERT OVERWRITE
文を実行して、データを非同期にインポートします。ほとんどの場合、SUBMIT JOB
文を使用して非同期ジョブを送信します。データインポート文の前にヒント(/*+ direct_batch_load=true*/
)を追加して、ジョブを高速化できます。詳細については、「INSERT OVERWRITE SELECT」トピックの「非同期書き込み」セクションをご参照ください。SUBMIT JOB INSERT OVERWRITE adb_oss_import_test SELECT * FROM oss_import_test_external_table;
結果例:
+---------------------------------------+ | job_id | +---------------------------------------+ | 2020112122202917203100908203303****** |
非同期ジョブの送信方法については、「インポートジョブを非同期で送信する」をご参照ください。
次の文を実行して、
adb_oss_import_test
テーブルのデータをクエリします。SELECT * FROM adb_oss_import_test;
前提条件
パーティション化されていない OSS 外部テーブル
CREATE TABLE [IF NOT EXISTS] table_name
(column_name column_type[, ...])
ENGINE='OSS'
TABLE_PROPERTIES='{
"endpoint":"endpoint",
"url":"OSS_LOCATION",
"accessid":"accesskey_id",
"accesskey":"accesskey_secret",
"format":"txt|orc|parquet",
"delimiter":";",
"skip_header_line_count":1,
"charset":"utf-8"
}';
テーブル形式 | パラメーター | 必須 | 説明 |
CSV、Parquet、または ORC | ENGINE='OSS' | はい | テーブルエンジン。値を OSS に設定します。 |
endpoint | OSS バケットの [エンドポイント]。AnalyticDB for MySQL は、VPC(仮想プライベートクラウド)を使用してのみ OSS にアクセスできます。 説明 OSS コンソール にログインし、バケットを見つけて、[概要] ページで [エンドポイント] を取得できます。 | ||
url | OSS オブジェクトまたはディレクトリのパス。有効な値:
| ||
accessid | OSS に対する権限を持つ Alibaba Cloud アカウントまたは Resource Access Management (RAM) ユーザーの AccessKey ID。 AccessKey ID の取得方法については、「アカウントと権限」をご参照ください。 | ||
accesskey | OSS に対する権限を持つ Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey シークレット。 AccessKey シークレットの取得方法については、「アカウントと権限」をご参照ください。 | ||
CSV | delimiter | CSV オブジェクトの列区切り文字。 | |
Parquet または ORC | format | OSS オブジェクトの形式。
説明
| |
CSV | null_value | いいえ | CSV オブジェクトの 重要 このパラメーターは、V3.1.4.2 以降の AnalyticDB for MySQL クラスターでのみサポートされています。 |
ossnull | CSV オブジェクトの
説明 上記の例は、 | ||
skip_header_line_count | データをインポートするときにスキップするヘッダー行の数。CSV オブジェクトの最初の行はテーブルヘッダーです。このパラメーターを 1 に設定すると、データをインポートするときにオブジェクトの最初の行がスキップされます。 このパラメーターのデフォルト値は 0 で、行をスキップしないことを指定します。 | ||
oss_ignore_quote_and_escape | 引用符 (") とエスケープ文字を無視するかどうかを指定します。このパラメーターのデフォルト値は false で、引用符 (") とエスケープ文字を無視しないことを指定します。 重要 このパラメーターは、V3.1.4.2 以降の AnalyticDB for MySQL クラスターでのみサポートされています。 | ||
charset | OSS 外部テーブルで使用される文字セット。有効な値:
重要 このパラメーターは、V3.1.10.4 以降の AnalyticDB for MySQL クラスターでのみサポートされています。 |
外部テーブルを作成するための文で使用される列名は、Parquet または ORC ファイルの列名と同じである必要があります。列名は大文字と小文字が区別されません。文の列の順序は、Parquet または ORC ファイルの順序と同じである必要があります。
外部テーブルを作成するときに、Parquet または ORC ファイルの特定の列のみを外部テーブルの列として選択できます。Parquet または ORC ファイルで選択されていない列はインポートされません。
外部テーブルを作成するために使用される文に、Parquet または ORC ファイルにない列が含まれている場合、この列には NULL が返されます。
Parquet、ORC、および AnalyticDB for MySQL 間のデータ型マッピングAnalyticDB for MySQL
Parquet と AnalyticDB for MySQL 間のデータ型マッピングAnalyticDB for MySQL
Parquet の基本型 | Parquet の論理型 | AnalyticDB for MySQL のデータ型AnalyticDB for MySQL |
BOOLEAN | N/A | BOOLEAN |
INT32 | INT_8 | TINYINT |
INT32 | INT_16 | SMALLINT |
INT32 | N/A | INT または INTEGER |
INT64 | N/A | BIGINT |
FLOAT | N/A | FLOAT |
DOUBLE | N/A | DOUBLE |
| DECIMAL | DECIMAL |
BINARY | UTF-8 |
|
INT32 | DATE | DATE |
INT64 | TIMESTAMP_MILLIS | TIMESTAMP または DATETIME |
INT96 | N/A | TIMESTAMP または DATETIME |
STRUCT
型の列を使用する Parquet 外部テーブルは作成できません。
ORC と AnalyticDB for MySQL 間のデータ型マッピングAnalyticDB for MySQL
ORC のデータ型 | AnalyticDB for MySQL のデータ型AnalyticDB for MySQL |
BOOLEAN | BOOLEAN |
BYTE | TINYINT |
SHORT | SMALLINT |
INT | INT または INTEGER |
LONG | BIGINT |
DECIMAL | DECIMAL |
FLOAT | FLOAT |
DOUBLE | DOUBLE |
|
|
TIMESTAMP | TIMESTAMP または DATETIME |
DATE | DATE |
LIST
、STRUCT
、または UNION
型を使用する ORC 外部テーブルは作成できません。MAP
型を使用する ORC 外部テーブルは作成できますが、クエリすることはできません。
AnalyticDB for MySQL では、OSS 外部テーブルを使用して、Hive 内の TEXT ファイルのデータの読み取りと書き込みを CSV フォーマットで行うことができます。次の文を使用して、外部テーブルを作成できます。
CREATE TABLE adb_csv_hive_format_oss (
a tinyint,
b smallint,
c int,
d bigint,
e boolean,
f float,
g double,
h varchar,
i varchar, -- binary
j timestamp,
k DECIMAL(10, 4),
l varchar, -- char(10)
m varchar, -- varchar(100)
n date
) ENGINE = 'OSS' TABLE_PROPERTIES='{
"format": "csv",
"endpoint":"oss-cn-hangzhou-internal.aliyuncs.com",
"accessid":"LTAIF****5FsE",
"accesskey":"Ccw****iWjv",
"url":"oss://testBucketname/adb_data/",
"delimiter": "\\1",
"null_value": "\\\\N",
"oss_ignore_quote_and_escape": "true",
"ossnull": 2
}';
Hive の TEXT ファイルのデータを読み書きするために CSV 形式の OSS 外部テーブルを作成する場合は、次の点に注意してください。
Hive の TEXT ファイルのデフォルトの列区切り文字は
\1
です。OSS 外部テーブルを使用して Hive の TEXT ファイルのデータを読み書きする場合は、delimiter
パラメーターで \1 を\\1
にエスケープする必要があります。デフォルトでは、Hive の TEXT ファイルの
NULL
値は\N
です。OSS 外部テーブルを使用して Hive の TEXT ファイルのデータを読み書きする場合は、null_value
パラメーターで \N を\\\\N
にエスケープする必要があります。Hive の
BINARY
、CHAR(N)
、およびVARCHAR(N)
型はすべて、AnalyticDB for MySQL のVARCHAR
型に対応します。AnalyticDB for MySQLBOOLEAN
などの Hive の他の基本データ型は、AnalyticDB for MySQL のデータ型と同じです。AnalyticDB for MySQL
パーティション化された OSS 外部テーブル
パーティションを含む OSS データ用に階層ディレクトリが生成されます。例:
parquet_partition_classic/
├── p1=2020-01-01
│ ├── p2=4
│ │ ├── p3=SHANGHAI
│ │ │ ├── 000000_0
│ └── 000000_1
│ └── p3=SHENZHEN
│ │ └── 000000_0
│ └── p2=6
│ └── p3=SHENZHEN
│ └── 000000_0
├── p1=2020-01-02
│ └── p2=8
│ ├── p3=SHANGHAI
│ │ └── 000000_0
│ └── p3=SHENZHEN
│ └── 000000_0
└── p1=2020-01-03
└── p2=6
├── p2=HANGZHOU
└── p3=SHENZHEN
└── 000000_0
上記の例では、p1 はレベル 1 パーティション、p2 はレベル 2 パーティション、p3 はレベル 3 パーティションを示します。パーティションごとにデータをクエリする場合は、OSS 外部テーブルを作成するために使用する文でパーティションキー列を指定する必要があります。次の文は、OSS 外部テーブルを作成し、外部テーブルでパーティションキー列を指定する方法を示しています。この例では、Parquet オブジェクトが使用されています。
CREATE TABLE [IF NOT EXISTS] table_name
(column_name column_type[, ...])
ENGINE='OSS'
TABLE_PROPERTIES='{
"endpoint":"エンドポイント",
"url":"OSS ロケーション",
"accessid":"アクセスキー ID",
"accesskey":"アクセスキー シークレット",
"format":"parquet",
"partition_column":"p1, p2, p3"
}';
TABLE_PROPERTIES
パラメーターのpartition_column
プロパティは、パーティションキー列(この例では p1、p2、p3)を指定します。partition_column
プロパティで指定されたパーティションキー列は、サンプルデータのパーティションレベルに準拠している必要があります。文で列を定義する場合は、パーティションキー列(この例では p1、p2、p3)とそのデータ型を含める必要があります。パーティションキー列は、列定義の最後に配置する必要があります。
文で定義されているパーティションキー列は、
partition_column
プロパティで指定されているパーティションキー列と同じ順序である必要があります。パーティションキー列では、次のデータ型がサポートされています。
BOOLEAN
、TINYINT
、SMALLINT
、INT
、INTEGER
、BIGINT
、FLOAT
、DOUBLE
、DECIMAL
、VARCHAR
、STRING
、DATE
、TIMESTAMP
。データをクエリする場合、パーティションキー列は他の列と同じ方法で表示および使用できます。
format パラメーターを空のままにすると、CSV フォーマットが使用されます。
その他のパラメーターについては、このトピックの「パーティション化されていない OSS 外部テーブル」セクションのパラメーター表をご参照ください。
参照資料
AnalyticDB for MySQL にデータをインポートする方法の詳細については、「サポートされているデータソース」をご参照ください。