本ページでは、 Realtime Compute に、リレーショナルデータベースサービス (RDS) または Distributed Relational Database Service (DRDS) の結果テーブルを作成する方法について説明します。 また、RDS または DRDS フィールドタイプと Realtime Compute フィールドタイプ間のマッピングについても説明します。
RDS
ApsaraDB for RDS は、オートスケーリング機能をサポートしている、安定性と信頼性のあるオンラインデータベースサービスです。 RDS は、Apsara 分散ファイルシステムと高性能ストレージに基づいて、MySQL、SQL Server、PostgreSQL、Postgres Plus Advanced Server (Oracleとの高度な互換性を持つ PPAS) などのさまざまなエンジンをサポートしています。 データベースの O&M 問題を解決するために、耐障害性、データバックアップ、データリカバリ、モニタリング、データ移行などの多様な要件に対応する包括的なソリューションセットを提供します。
DDL の定義
Realtime Compute は、結果テーブルとして RDS または DRDS テーブルの作成をサポートしています。 現在、MySQL テーブルのみがサポートされています。 サンプルコードは次のとおりです。
create table rds_output(
id int,
len int,
content VARCHAR,
primary key(id,len)
) with (
type='rds',
url='yourDatabaseURL',
tableName='yourDatabaseTable',
userName='yourDatabaseUserName',
password='yourDatabasePassword'
);
- Realtime Compute では、RDS または DRDS 結果テーブルにデータを書き込むことができます。 書き込むためには、Realtime Compute
が結果データの各行に基づいて SQL ステートメントを連結し、宛先データベースに対して SQL ステートメントを実行します。 Realtime Compute が一度に複数のデータレコードを書き込めるようにしたい場合は、
? rewriteBatchedStatements = true
を URL の最後に加えます。 加えないと性能が低下します。 - RDS for MySQL は自動インクリメントの主キーをサポートしています。 Realtime Compute に、データの書き込み中の自動インクリメントの主キーをサポートさせる場合は、DDL ステートメントの自動インクリメントフィールドを宣言しないようにします。 たとえば、ID は自動インクリメントフィールドです。 このフィールドが Realtime Compute DDL で宣言されていない場合、データの行がデータベースに書き込まれると、データベースは ID フィールドを自動的に追加します。
- RDS の接続には、データストレージの登録方法の使用を推奨します。 詳細については、「ApsaraDB for RDS リソースの登録」をご参照ください。
WITH パラメーター
名称 | 説明 | 注釈 |
---|---|---|
url | データベースの接続アドレス。 | アドレスについての詳細は、「」をご参照ください。 |
tableName | テーブル名。 | なし |
userName | ログインユーザー名。 | なし |
password | ログインパスワード。 | なし |
maxRetryTimes | 挿入再試行の最大回数。 | オプション。 デフォルト値: 3。 |
batchSize | 一度に書き込めるレコードの数。 | オプション。 デフォルト値: 50。 |
bufferSize | 重複排除後のバッファーサイズ。 このパラメーターは、主キーが指定されている場合にのみ有効です。 | オプション。 デフォルト値: 1 この値は、入力データレコードが 1 つになると出力が開始されることを示します。 V1.4.1 では、デフォルト値が 1000 に変更されています。 |
flushIntervalMs | 書き込みのタイムアウト期間 単位: ミリ秒。 | オプション。 デフォルト値 : 5000 この値は、5000 ミリ秒(5 秒) 以内にデータが書き込まれなかった場合、バッファーされたすべてのデータが書き込まれることを示します。 |
excludeUpdateColumns | Realtime Compute が同じキー値でデータレコードを更新するときに除外される列。 | オプション。 このパラメーターはデフォルトで無記入となります。 主キーフィールドはデフォルトで除外されます。 |
ignoreDelete | 削除操作を無視するかどうか。 | デフォルト値: false 。 |
partitionBy | Realtime Compute は、シンクオペレーターにデータを書き込む前に、パラメーター値に基づいてハッシュ演算を実行します。 その後、データは対応するハッシュ演算子に流れます。 | オプション。 このパラメーターはデフォルトで無記入となります。 |
フィールドタイプマッピング
RDS フィールドタイプ | Realtime Compute フィールドタイプ |
---|---|
TEXT | VARCHAR |
BYTE | VARCHAR |
INTEGER | INT |
LONG | BIGINT |
DOUBLE | DOUBLE |
DATE | VARCHAR |
DATETIME | VARCHAR |
TIMESTAMP | VARCHAR |
TIME | VARCHAR |
YEAR | VARCHAR |
FLOAT | FLOAT |
DECIMAL | DECIMAL |
CHAR | VARCHAR |
JDBC 接続パラメーター
名称 | 説明 | デフォルト値 | 必要な最低バージョン |
---|---|---|---|
useUnicode | Unicode 文字セットを使用するかどうか。 characterEncoding パラメーターが gb2312 または gbk に設定されている場合、このパラメーターは true に設定する必要があります。 | false | 1.1g |
characterEncoding | useUnicode が true に設定されている場合に使用される文字エンコード。 たとえば、このパラメーターは gb2312、または gbk に設定できます。 | false | 1.1g |
autoReconnect | データベース接続が予期せず中断されたときに、自動的に再接続するかどうか。 | false | 1.1 |
autoReconnectForPools | データベース接続プールに適用可能な再接続ポリシーを使用するかどうか。 | false | 3.1.3 |
failOverReadOnly | データベースが自動的に再接続された後に、接続を読み取り専用に設定するかどうか。 | true | 3.0.12 |
maxReconnects | autoReconnect が true に設定されている場合に可能な再接続再試行の最大回数。 | 3 | 1.1 |
initialTimeout | autoReconnect が true に設定されている場合の再接続再試行の間隔。 単位: 秒。 | 2 | 1.1 |
connectTimeout | データベースサーバーとのソケット接続を確立するためのタイムアウト期間。 単位: ミリ秒。 値が 0 の場合はタイムアウトがないことを示します。これは JDK V1.4 以降に適用されます。 | 0 | 3.0.1 |
socketTimeout | ソケット操作 (読み取りまたは書き込み) のタイムアウト期間。 単位: ミリ秒。 値が 0 の場合はタイムアウトがないことを示します。 | 0 | 3.0.1 |
よくある質問
-
Q: Realtime Compute の結果データが RDS テーブルに書き込まれると、新しいレコードが生成されますか、それとも主キーによってデータが更新されますか。
A: 主キーが DDL で定義されている場合、
insert into on duplicate key update
ステートメントは、レコードを更新します。 つまり、データレコードに関しては、主キーがテーブルに存在しない場合にデータレコードがテーブルに挿入されます。 主キーが存在する場合、データレコードが更新されます。 主キーが DDL で宣言されていない場合、insert into
ステートメントは、データレコードをテーブルに追加します。 -
Q: RDS テーブルの固有インデックスを使用して GROUP BY 操作を実行するときに注意することはありますか。
A: RDS テーブルには自動インクリメント主キーが 1 つしかありません。この主キーは、Realtime Compute ジョブで主キーとして宣言できません。 RDS テーブルの固有インデックスを使用して GROUP BY を実行する場合は、ジョブの主キーに対してこれらの固有インデックスを宣言します。