Vertica 9.0.1 “Grader”
新機能のご紹介
マイクロフォーカスエンタープライズ株式会社 Vertica事業部
2018年2月1日
ニューエコノミースケールのコアパフォーマンス向上
機械学習、及び、高度な分析の強化
マルチクラウド:様々な環境にデプロイ可能
オープンソースインテグレーション、エコシステム
との連携強化
エンハンスメント
ハイライト
• 計算ノードとストレージの分離: 優れたフィードバックにより、Eonモードがより安定し、よ
り速く、よりコスト効率が高く、拡張性が高く、管理が容易になりました。2018年の初めに、
より多くのお客様から新しいベータ版のリクエストをいただいている状況です。
• 機械学習: Verticaのアップグレードで機械学習モデルをアップグレードできるようになりまし
た。
マルチクラウド:
様々な環境にデプロイ可能
• ベータプログラムは、デジタルマーケティン
グ、IoT、エンターテイメント、ヘルスケア、
ファイナンス等の分野の多数の既存のお客様
や購入予定のお客様が積極的に参加中
• 各テストにより、いくつかのAWS地域におい
て、ノード追加削除のオペレーションが高速
であることや、S3ロード/クエリを大規模に実
施できることを実証済み
• 多くのフィードバックにより、使いやすさと
パフォーマンスが向上
• 2018年初頭は、新たにベータ版使用のユー
ザー様を増やしながら継続
• バックアップ/リストアとマシンラーニングを
中心に、これまで受領したベータ版への
フィードバックを組み込んだ後にGA版をリ
リース予定
AWS S3上Eonモードβ版(計算ノードとストレージの分離モード)継続中
Node
Optimizer
Execution Engine
Depot
Node
Optimizer
Execution Engine
Depot
Node
Optimizer
Execution Engine
Depot
http://tinyurl.com/hllq5kd
共有ストレージ上のROS
- AWS S3バケット専用
エラスティック機能によるクエリパフォーマンスの向上
• エラスティック・スループット・スケーリング(ETS)は、従来のエンタープライズモード(ノードをク
ラウドクラスターにすばやく追加できないモード)と比べて、Eonモードの利点です。クラスターにノー
ドを追加するとすぐにクエリのパフォーマンスが向上します
• 9.0.1では、Eonモードのパフォーマンスが9.0.0の場合よりもさらに向上しています
0%
50%
100%
150%
200%
250%
300%
vertica-9.0.0-0
vertica-9.0.1-0
%fasterthanVerticaEnterprisemode
Elastic Throughput Scaling (ETS) with Eon mode
- addition of nodes gives increase in query performance
Also illustrates performance improvement of Vertica 9.0.1 over Vertica 9.0
3 nodes, 3 shards 6 nodes, 3 shards 9 nodes, 3 shards
ノードを追加するとすぐにクエリのスループットが向上
Added nodes quickly have a positive affect on query throughput
(補足)エラスティック機能とは?
ノード追加時にほぼシームレスに性能向上可能
• ノードの追加/削除はプライマリーのコピーを再配布しない(データのリバランスの必要がな
い)
• ワークロードベースでノード追加/削除を実施
Node
Optimizer
Execution Engine
Cache
Shared Storage
Node
Optimizer
Execution Engine
Cache
Node
Optimizer
Execution Engine
Cache
Node
Optimizer
Execution Engine
Cache
Node
Optimizer
Execution Engine
Cache
Shared Storage
Node
Optimizer
Execution Engine
Cache
Node
Optimizer
Execution Engine
Cache
Node
Optimizer
Execution Engine
Cache ノード追加
(補足)エラスティック機能とは?
エラスティックスループットスケーリングの仕組み
Query 1 2 3 4
Q1 A B C
Q2 B C A
Q3 A C B
Q4 A C B
Node 1 2 3 4
Shards A B C A
B C A B
3ノードクラスターで開始:
Query 1 2 3
Q1 A B C
Q2 A B C
Q3 A B C
Node 1 2 3
Shards A B C
B C A
4つめのノードを追加:
各ノードは3つのクエリを同時実可能: トータル 3
各ノードは3つのクエリを同時実可能: トータル4!
※どのノードもイニシエーターノードとなるようにロードバランスを設定する必要あり
New in 9.0SP1 – 機能
• 追加機能
• ADD COLUMN / DROP COLUMN
• us-east-1以外のAWSリージョン(おそらくすべて, us-west-2はテスト完了)
• MC: Eonモードデータベース用のインスタンスストレージのプロビジョニング、デポのサイズ/使用状
況の可視化
• AdmintoolsでEonモードのデータベース作成
• 無効化されている機能
• データベースデザイナー(DBD) ※9.1以降、有効化予定
• MC拡張モニタリング
• get_node_dependencies() 関数
• ROSプッシュバックのリミットが共有ストレージ毎のコンテナ数に
• S3上のORC/Parquetの性能向上(S3へのAPI呼び出しを減らしたためコスト削減にも寄与)
New in 9.0SP1 – 安定性
• あらゆる種類のDML / DDL操作による同時実行のサブスクリプション変更がより安定
• Clean_communal_storage()関数がより高パフォーマンスで、キャンセル可能
• EPHEMERALノードがより良く機能するように
• インポート/エクスポートがより安定
• 継続的な同時実行DDLによるサブスクリプションスタベーションの可能性を大幅に低減
• ロードやクエリ実行中にノード追加削除しても高速に対応可能
(補足)サブスクリプションとは?
各ノードと各共有ストレージ上のデータの関連付けのデータ
Table
Projection
Node 1 Node 2 Node 3
Table
Projection
Shard A Shard B Shard C
Node 1 Node 2 Node 3
ROS
FILE
ROS
FILE
ROS
FILE
LOAD OPERATION
Verticaエンタープライズモード Vertica Eonモード
1
Depot Usage Percentage
0.05%
Also a link to Depot Activity:
Find out what’s happening in Depot!
9.0.1において、データベースサイ
ズ、デポ合計を含む情報が、全体
的なデータサイズとアクティブな
コンピューティングデータサイズ
の絵に追加
MC GUIのストレージ管理者画面でEonモードのデポを表示
Scalability
users, workloads, metadata, & data
Performance and Stability
Monitoring and Manageability
コア機能
Compliance and Security
9.0以前:ヒント句の確認に3ステップが必要
user=> CREATE DIRECTED QUERY OPTIMIZER optPlan select
customer_name, customer_state from customer_dimension;
CREATE DIRECTED QUERY
user=> ACTIVATE DIRECTED QUERY optPlan;
ACTIVATE DIRECTED QUERY
user=> select query_name, annotated_query from
DIRECTED_QUERIES where query_name='optPlan';
query_name |
annotated_query
------------+--------------------------------------------
---------------------------------------------------------
---------------------------------------------------------
---------------------------------------------------------
--
optPlan | SELECT /*+verbatim*/
customer_dimension.customer_name AS customer_name,
customer_dimension.customer_state AS customer_state
FROM public.customer_dimension AS
customer_dimension/*+projs('public.customer_dimension')*/
(1 row)
9.0SP1以降:1ステップでヒント句が確認可能
user=> EXPLAIN ANNOTATED select customer_name,
customer_state from customer_dimension;
QUERY PLAN
-----------------------------------------------------
-----------------------------------------------------
-------------------
SELECT /*+verbatim*/
customer_dimension.customer_name AS customer_name,
customer_dimension.customer_state AS customer_state
FROM public.customer_dimension AS
customer_dimension/*+projs('public.customer_dimension
')*/
(2 rows)
Directedクエリがより使いやすく
9.0以前は、Directedクエリの内容を確認するために複数ステップを踏む必要があったが、1ス
テップで情報を確認可能に
9.0以前
user=> CREATE TABLE foo (a INTEGER);
user=> COPY foo (f FILLER VARCHAR, a AS
f::INTEGER) FROM STDIN REJECTED DATA AS
TABLE foo_rej;
1
2a
3
.
ERROR 2827: Could not convert "foo" from
column "*FILLER*".a_vc to an int8
user=> SELECT a FROM foo;
a
---
(0 rows)
9.0SP1以降(REJECTMAX指定で最大REJECT行も設
定可能)
user=> CREATE TABLE foo (a INTEGER);
user=> SELECT
set_config_parameter('CopyFaultTolerantExpressions', 1);
user=> COPY foo (f FILLER VARCHAR, a AS f::INTEGER) FROM STDIN
REJECTED DATA AS TABLE foo_rej;
1
2a
3
.
user=> SELECT a FROM foo;
a
---
1
3
(2 rows)
user=> SELECT rejected_data, rejected_reason FROM foo_rej;
rejected_data | rejected_reason
---------------+-----------------------------------------------
Tuple (2a) | ERROR 2827: Could not convert "2a" from column
"*FILLER*".f to an int8
(1 row)
COPY文のエラーハンドリングがよりフレキシブルに
9.0以前は、COPY実行中に変換処理によるエラーが発生した場合、ただちにロールバックする仕
様であったが、エラー行のみREJECTしその他の正常データをコピーすることが設定可能に
異なるバージョンでバックアップリストア可能に
9.0.0-2以降のバージョンで対応
 バージョン9.0.0-2より、Verticaは、現在のデータベースバージョンより1つ後のマイナーバー
ジョンまでのバージョンに対して、オブジェクトレベルのレプリケーションとリストアをサ
ポート。 たとえば、バージョン9.0.0-2のデータベースからバージョン9.0.1のデータベースに
オブジェクトを複製(レプリケーション)または復元(リストア)することが可能
 より新しいバージョンから古いバージョンへの複製/復元は未サポート
 サポートされる最低のソースバージョンは9.0.0-2
 異なるバージョン間のフルリストアとコピークラスターは未サポート
 「Listbackup」タスクにバックアップ対象のデータベースバージョンが表示されるように変更
9.0.0-2 9.0.1-1
オブジェクト
レプリケーションA A
vbrでオブジェクトを指定時にワイルドカードが使用可能に
 データベースオブジェクト:
- スキーマ:s, s1, s2
- テーブル:s.t, s.tt, s1.t1, s1.tt1, s2.t2, s2.tt2
 構成ファイル設定
objects=
includeObjects=s*,s.*
excludeObjects=s,s.t
 バックアップ対象:
- s1, s2, s.tt
$ vbr -c vbr.ini -t backup
Starting backup of database xli.
Participating nodes: node01, node02,
node03.
Include objects: s*, s.*; exclude
objects: s, s.t
Snapshotting database.
Snapshot complete.
Backing up objects: s1,s2,s.tt
Approximate bytes to copy: 0 of 0 total.
[=======================================
===========] 100%
Copying backup metadata.
Finalizing backup.
Deleting old restore points.
Backup complete!
S3バックアップ時のクライアント側の暗号化機能を追加
(参考) https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/serv-side-encryption.html
 vbrの構成ファイルの[S3]セクションに以下の2つのパラメーターを追加
- s3_encrypt_at_rest:
- 「sse」に設定することにより、バックアップを暗号化。デフォルトはNone
- s3_sse_kms_key_id:
- KMSキーのIDを入力することにより、SSE-KMSを有効化。デフォルトはNone
- S3バケットは、KMSキーと同じリージョン内にある必要あり
- s3_encrypt_transportの有効化必須
 In general, only set s3_encrypt_at_rest will use SSE-S3, set both s3_encrypt_at_rest and
s3_sse_kms_key_id will use SSE-KMS.
 set s3_encrypt_at_restのみの設定の場合、SSE-S3を使用し、s3_encrypt_at_restと
s3_sse_kms_key_idの両方を設定するとSSE-KMSが使用される
その他コア機能の拡張
• Vertica Sparkコネクタにおいて、ORCフォーマットに加えて、Parquetファイルフォーマットも
対応開始
• より安全なAWS S3接続:VerticaはAWSセッショントークンを認証に使用できるようになった。
3つのユースケースすべてに対応:S3からデータをロード、S3にデータをエクスポート、S3か
ら外部クエリをエクスポート
• ALTER TABLE ... ADD COLUMN が派生していない式(例:すべてNULL、7、 “Cupcakes”)の場合、
パフォーマンス向上
• システムテーブルへのGRANT/REVOKEをサポート
• 例:grant select on vs_columns_helper to user1;
• UUID型をADO.NET、ODBC、OLE DBにおいて、完全にサポート対象に
Open source integration, ecosystem
friendly architecture
Hadoop
Kafka
Hadoop
Hadoop
• 課題: Verticaは、Hadoopユーザー名を渡すのではなく、HDFS上のデータにアクセスするときにユーザーセッ
ションを偽装します。ユーザー権限の管理を集中管理しているエンタープライズレベルのお客様の中には、
Hadoopのユーザー名を渡すことができるようにリクエストされていました。
• 解決策: VerticaはApache Rangerと連携可能となり、Hadoopユーザー名に関連付けられた権限はVerticaのアクセ
ス制御で管理できるようになりました。
• 利点: セキュリティポリシーを一元化して運用上の負担を軽減します。
• 例:
Hadoop Rangerサービスがセキュリティポリシー用に統合
• 課題: HiveメタストアのHAを有効にすると、hive.metastore.urisに複数のURIが存在するように
なります。HCatalogコネクタでーは、パラメーターでHiveメタストアのホスト名とポートを1
つだけ指定できるのみであったため、HA用には機能しませんでした。
• 解決策: hostnameとportのパラメーターをHIVE_METASTORE_URISパラメーターに置き換えるこ
とができるようになり、ユーザーは複数のパラメーターを指定できるようになりました。
• 利点: HiveメタストアのHAが複数のホストを構成できるようになっている場合に使用できます。
• 例:
createhcatalog schema hcat with
hostname='thrift://node3vm.verticacorp.com:9083,thrift://node2-
vm.verticacorp.com:9083';
コネクタの高可用性(HA)サポート
• 課題: HDFSを使用したKerberosの設定は難しく、トラブルシューティングは困難な場合が多いです。そのため、我々
は設定をチェックし、問題について助言するユーティリティを提供しましたが、このユーティリティはSSL対応環境
では動作しませんでした。KerberosとSSLの両方を使用する顧客が増えている昨今、困難な場合が増えてきていまし
た。
• 解決策: SSLとKerberosの両方を持つ環境で動作するようにKerberosユーティリティを更新しまました。
• 利点: KerberosとSSLを使用している場合、VerticaとHDFSの間の問題について、お客様とサポートの両方でより簡単に
デバッグできるようになります。
• 例: シンタックスに変更はありません。SSLが有効になっているかどうかをテストするために自動的に
https://namenode が使用されます。
select kerberos_hdfs_config_check('hdfs_host:hdfs_port', 'webhdfs_host:webhdfs_port', 'webhcat_host:webhcat_port');
実行例: select kerberos_hdfs_config_check('server1.verticacorp.com:9433', 'server2.verticacorp.com:10433',
'server3.verticacorp.com:14433');
SSLを処理するKerberos HDFS構成チェック機能の強化
kerberos_hdfs_config_check()は、設定ファイルに存在するすべてのクラスターを推定します。次に、デフォルト
のネームサービスhdfs:///と、configで指定されている他のネームサービスをチェックします。Verticaが設定ファ
イルからネームサービスを推定できない場合、ユーザーは引数を使用してネームサービスを指定する必要があ
ります。
予測分析のための
機械学習
Machine Learning for
predictive analytics
• 課題: データサイエンティストは、売上高予測のような数値予測を行う必要があります。非常に大きなデータセット
の場合、単純な線形回帰よりも高度なアルゴリズムが必要となります。非線形の特徴であっても、ほとんどの問題
によく効く汎用的な回帰分析が必要となります。オーバーフィット(過剰適合)の傾向のため、通常の回帰分析は、
未知のデータに対しては適合しないことがあります。Verticaにおける既存のランダムフォレストの関数は分類モデル
のみでした。
• 解決策: ブートストラップによるオーバーフィットを避けるためのランダムフォレスト回帰アルゴリズムを追加しま
した。
• 利点: ユーザーは、数値データとカテゴリ別データ予測因子を使用してランダムフォレストを使用することにより、
Verticaに存在する大規模なデータセットに対して簡単に予測を行うことができます。複数のアプリケーションに使用
可能です。
• 例:
SELECT RF_REGRESSOR(‘my_model’, -- Model name
‘sales_data_table’, -- Input table name
‘sales_revenue’, -- Column to predict
‘income, location, <…>’ -- Columns for prediction
USING PARAMETERS ntree=20, sampling_size=0.632);
ランダムフォレスト回帰分析
ランダムフォレスト回帰分析を使用して数値を予測
より容易なデータ探索
カテゴリー列の統計的集計関数
• 課題: データサイエンティストは、機械学習の処理の一環としてデータを探索する必要があります。 彼らは、カテゴ
リーデータの重要な統計情報を見るために多くの関数を適用する必要がありました。
• 解決策: Verticaは、ユーザーがカテゴリーの列に関する重要な統計情報を取得できるように統計的な集計関数を追加
しました。
• 利点: カテゴリー列の値のヒストグラムを確認するために、毎回複数のSQLをコールする必要はありません。代わり
に、テーブルの複数の列に対して、単一のSQL呼び出しで必要な情報を得ることができます。
• 例:
SELECT SUMMARIZE_CATCOL (current_salary USING PARAMETERS TOPK = 5) OVER() FROM salary_data;
CATEGORY | COUNT | PERCENT
---------+-------+---------
| 1000 | 100
39004 | 2 | 0.2
35321 | 1 | 0.1
36313 | 1 | 0.1
36538 | 1 | 0.1
36562 | 1 | 0.1
• 課題: 後から復元するためにデータベースをバックアップする際に、モデルをバックアップできるよう
にする必要がありました。また、Verticaバージョンをアップグレードする場合、ユーザーは以前のバー
ジョンで作成したmlモデルを使用できるようにする必要がありました。
• 解決策: 異なるバージョン間でのモデルのバックアップとリストアがサポートされるようになりました。
• 利点: ユーザーは、機械学習モデルを作成し、バックアップしたものを新しいバージョンでリストアで
きるようになります。
• 例:
SELECT UPGRADE_MODEL(USING PARAMETERS model_name =
‘myLogisticRegModel’);
※dbadminユーザーは、「 SELECT UPGRADE_MODEL();」を使用して、アップグレードすべきすべてのモデルを
アップグレード可能
※下記のようなエラーが発生した場合も、適用可能
ERROR 5861:Error calling setup() in User Function apply_kmeansat [src/Common/GPredict.cpp:47], error code: 0, message:
Error in setup: [Error in setup: Model 'public.mykmeansmodel' is not in the current version format. Please run
upgrade_model]
機械学習モデルのバックアップリストア関連追加機能
機械学習モデルのアップグレード関数
Elastic Net 正則化回帰
線形およびロジスティック回帰に新しい正則化法を追加
• 課題: データサイエンティストは、機械学習モデルを作成する際にオーバーフィッティングを避け
たいと考えています。ほとんどの場合、L1(既にVerticaに実装済み)が優れていますが、データ
サイエンティストは相関の高い特徴に対応できる別の方法を使用したいと考えている場合があり
ました。
• 解決策: 線形およびロジスティック回帰にElastic Net(ENet)正規化法を追加しました。
• 利点: ユーザーは回帰モデルを訓練する際に、ENet正則化法を使用できるようになりました。彼ら
は、L1とL2の正則化がどの程度提供されるかを定義する混合パラメーター(アルファ)を入力す
ることができます。
• 例:
• SELECT LINEAR_REG('myLinearRegModel', ‘sales’, ‘sales_revenue’,
‘store_size, number_employees' USING PARAMETERS optimizer=‘CGD‘,
regularization= ‘ENet’, alpha=0.7);
クロスバリデーションと数値サマリー関数の拡張
• L1正規化(Lasso回帰)はロジスティック回帰でもサポートされるようになりました。
• クロスバリデーションは、Verticaのナイーブベイズ(マルチクラス分類アルゴリズム)でもサ
ポートされるようになりました。
• クロスバリデーション使用時にcut_offパラメーターを指定可能に
ロジスティック回帰などのアルゴリズムを使用している間、デフォルトのカットオフ値0.5は、特定のユース
ケースには適していない可能性がありました。新しいリリースでは、ユーザーはクロスバリデーション関数
のcut_offパラメーター(0と1の間の値)をロジスティック回帰関数に渡すことができます。
• 数値集計関数において特定の列の排除を指定可能に
ユーザーは大きなテーブルの数値集計を取得したいものの、idのようないくつかの列は除外する必要がある場
合、これまでは指定できませんでした。新しいリリースでは、数値サマリー関数でexclude_columnsパラメー
ターを使用して該当列の除外を行うことができます。
SELECT SUMMARIZE_NUMCOL(* USING PARAMETERS exclude_columns='id,name,gender,title') OVER() FROM employee;
サポートプラットフォーム
Platform support
• Amazon Linux 2017.09 <1.0> (Vertica 9.0.0-1以降でも対応)
• Debian Linux 8.9 (Vertica 8.1.1-7以降でも対応)
• RHEL/CentOS Linux 7.4 (Vertica 8.1.1-7以降でも対応)
• Vertica 8.1.1へのRHEL 6.9のバックポートサポート
• Spark 2.2
プラットフォーム – 追加
• MS SQL Server 2008
プラットフォーム – サポート終了
Thank you

Vertica 9.0.1 新機能

Editor's Notes