2019년 8월 22일 버티카 웨비나 진행 자료
주제: Vertica New Features - 8.1에서 9.2까지
버티카 8.1 버전부터 9.2 버전까지의 신기능에 대한 소개를 다루고 있는 웨비나입니다. 특정 기능의 Deep-dive 또는 상세 내용과 관련하여서는 댓글로 문의주시길 바랍니다.
웨비나 녹화 링크: https://www.youtube.com/watch?v=ExdrBBpGjDw
1. Vertica New Features
8.1부터 9.2까지의 신기능 소개
이기훈 부장 | Lee, Kee Hoon (KeeHoon.Lee@microfocus.com)
Presales Consultant, Asia Pacific and Japan – Vertica, Micro Focus
22nd Aug, 2019
2. 목차
2
▪ Vertica 버전 출시 주기
▪ Vertica 신기능
- 8.1, 9.0, 9.1, 9.2 버전별 신기능
- 버전별 주요 기능 요약
4. Vertica 버전 명시 방법
4
▪ Vertica는 다음과 같이 버전을 표기
- Major Version
- Minor Version
- Service Pack
- Hot Fix
▪ 예를 들어, Vertica 9.2.1-3 으로 표기
▪ 메뉴얼 및 문서들은 최소 Minor Version 단위로 묶어서 제공
- 가령, New Features in 9.2.X 등으로 표시
5. Vertica 제품 릴리즈 주기
5
▪ 약 10개월 주기로 새로운 Minor Version 릴리즈
- Minor Version 의 신기능에 따라 Major Version 변경 여부를 결정
- Minor Version 과 Major Version 의 제품의 신기능의 수, 개선의 양에서는 큰 차이가 없음
- 단, 새로운 컨셉의 내용들이 주로 추가된 경우에 Major 버전이 업데이트 되는 방향
- 가령, 7버전의 경우 HDFS 연결, 8버전의 경우 In-DB 머신러닝, 9버전의 경우 클라우드 지원
▪ 즉, 현재 9.2 버전에서 다음 업데이트는 9.3 이나 10.0 모두 가능하지만, 본질적으로 제품이
개선되는 정도에서는 큰 변화가 없음
6. 2013 2014 2015 2016
Oct 2015 – May 2016
“Excavator” 7.2.x
Flextable AVRO parser
support
Kafka Integration
Native Python Client
Directed queries
In-database Machine Learning
Data preparation
S3 Import / Export
Hadoop Parquet File reader
Lightweight partition copy
Object level restore
Replication
Jan 2012 – July
2012
Version 5.1.x
Elastic Cluster
Networked Joins
Role-based security
Workload Analyzer
Advanced Analytics
Udx SDK
Management
Console
July 2014 – June 2015
“Dragline” 7.1.x
Live Aggregate
Projections
Load compressed files
Swap partitions
Active Standby Nodes
Cascading Resource
Pools
OLAP SQL ROLLUP
functions
CTE early materialization
Node pruning for simple
SELECTs
Vertica storage on HDFS
Advanced Text Search
Vertica Place –
geospatial support
Vertica Pulse –
sentiment analysis
Hadoop ORC File reader
Dec 2013 – Aug 2014
“Crane” 7.0.x
Flextables
- “Schema on read”
Key/Value API
Hcatalog Connector
Udx – Java support
June 2012
Version 6.0.x
Udx – R support
User defined loads
External tables
Schema Evolution
Merge / Upsert
Load ON ANY NODE
Nov 2012 – Oct
2013
“Bulldozer” (6.1)
Hadoop connector
AWS AMI
Expanded CE
functionality
SQL CTE
LDAP enhancements
Aug 2016 – Dec 2016
“Frontloader” 8.0.x
Lightweight table copy
Udx – Python support
“hdfs” scheme support
Azure VM
Kafka bidirectional
support
Spark Integration
bidirectional
New Machine Learning
tools (Naïve Bayes,
Robust z-score)
FIPS compliance
2012
Apr 2017 – July
2017
Version 8.1.x
Auto-flattened tables
New M/L tools (SVM,
Random Forest)
Missing value
imputation
Spark 2.0, 2.1
integration
Hadoop Parquet File
writer
S3 backup and
restore
Improved Kafka load
management
Geohash support
Oct 2017 – Dec 2017
“Grader” 9.0.x
GCP marketplace
UUID support
Hierarchical partition
management
Hadoop sentry
integration
Hadoop Realms
support
M/L one-hot encoding
M/L cross-validation of
models
Import, export,
upgrade of M/L models
Backup, restore and
replicate to a later
version
Support for HDP 2.6
2017 2019
Jan 2018
Version 9.1.x
EON Mode
Voltage encryption
integration
New M/L tools (SVD,
PCA, ROC, PRC)
Granular AWS security
Python UDX supports
UDTF
2018
May 2019
Version 9.2.x
Vertica의 여정
8. 2013 2014 2015 2016
Oct 2015 – May 2016
“Excavator” 7.2.x
Flextable AVRO parser
support
Kafka Integration
Native Python Client
Directed queries
In-database Machine
Learning
Data preparation
S3 Import / Export
Hadoop Parquet File reader
Lightweight partition copy
Object level restore
Replication
Jan 2012 – July
2012
Version 5.1.x
Elastic Cluster
Networked Joins
Role-based security
Workload Analyzer
Advanced Analytics
Udx SDK
Management
Console
July 2014 – June 2015
“Dragline” 7.1.x
Live Aggregate
Projections
Load compressed files
Swap partitions
Active Standby Nodes
Cascading Resource
Pools
OLAP SQL ROLLUP
functions
CTE early materialization
Node pruning for simple
SELECTs
Vertica storage on HDFS
Advanced Text Search
Vertica Place –
geospatial support
Vertica Pulse –
sentiment analysis
Hadoop ORC File reader
Dec 2013 – Aug 2014
“Crane” 7.0.x
Flextables
- “Schema on read”
Key/Value API
Hcatalog Connector
Udx – Java support
June 2012
Version 6.0.x
Udx – R support
User defined loads
External tables
Schema Evolution
Merge / Upsert
Load ON ANY NODE
Nov 2012 – Oct
2013
“Bulldozer” (6.1)
Hadoop connector
AWS AMI
Expanded CE
functionality
SQL CTE
LDAP enhancements
Aug 2016 – Dec 2016
“Frontloader” 8.0.x
Lightweight table copy
Udx – Python support
“hdfs” scheme support
Azure VM
Kafka bidirectional
support
Spark Integration
bidirectional
New Machine Learning
tools (Naïve Bayes,
Robust z-score)
FIPS compliance
2012 2017 20192018
Vertica의 여정
• Vertica의 주요 강점인 기능들은
이미 8.0.X 버전까지 신기능으로
추가되어 옴
• Hadoop 연계
• 클라우드 지원 (AWS, Azure)
• Native Kafka Connector
• Native Spark Connector
• In-DB Machine Learning 지원
• 8.1 이후 주요 변화들은 다음으로
압축
• 엔진의 성능 개선
• 신기능의 고도화
• 클라우드 기술 내재화 (Eon)
10. 신기능 - Flatten Table
10
▪ 기능 소개: 데이터가 늘면서 역정규화를 권고하긴 하지만, 직접적인 수정이 여의치 않은 경우에
활용할 수 있는 테이블을 생성하는 기술로, 역정규화에 대한 수월한 자동화 수행
▪ 장점: 변경이 잦지 않은 디멘젼에 대한 관리 및 Prejoin 대비 빠른 성능
▪ 사용 예시:
CREATE TABLE orderFact (
order_id int PRIMARY KEY,
cust_id int REFERENCES
custDim(cid),
cust_name varchar(20) SET USING (
SELECT name FROM custDim
WHERE custDim.cid = cust_id
), amount numeric; );
11. 성능 개선 – 다수의 파일에 대한 동시 적재 성능
8.0 버전 대비 다중 파일 적재에 대한 속도 개선
[8.1에서의 적재 속도 개선 사항]
12. 성능 개선 – 쿼리 동시성 지원도 향상
12
메모리 사용성 개선을 통한 쿼리 동시성 지원도 상승
Before
After
[8.1에서의 기존 버전 대비 쿼리 동시성 지원도] [8.1에서의 세션 레벨의 메모리 사용성]
13. 성능 개선 – 다중 분석 함수 쿼리 성능 개선
13
여러 분석함수를 한 번에 수행하는 형태로 알고리즘 개선
개선된 수행 시간 및 효율적인 메모리 활용 (1번의 버퍼 생성으로 처리)
SELECT
percentile_disc(0.5) WITHIN GROUP (ORDER BY quantity) OVER (PARTITION BY year, month, day),
percentile_disc(0.5) WITHIN GROUP (ORDER BY quantity) OVER (PARTITION BY year, month),
percentile_disc(0.5) WITHIN GROUP (ORDER BY quantity) OVER (PARTITION BY year)
FROM sales;
SELECT
percentile_disc(0.5) WITHIN GROUP (ORDER BY quantity) OVER (PARTITION BY year, month),
percentile_disc(0.5) WITHIN GROUP (ORDER BY price) OVER (PARTITION BY year, month),
percentile_disc(0.5) WITHIN GROUP (ORDER BY inventory) OVER (PARTITION BY year, month)
FROM sales;
지원되는 함수:
• 리포팅 관련 집계 함수
• AVG, COUNT, SUM, MIN, MAX
• STDDEV, STDDEV_POP, STDDEV_SAMP
• VARIANCE, VAR_POP, VAR_SAMP
• PERCENTILE_CONT, PERCENTILE_DISC
14. 하둡 연계 – 하둡 클러스터와의 더 긴밀한 연계
▪ 하둡 클러스터 상태 확인 기능 강화
- Vertica 클러스터에서 하둡의 구조를 이해
- 하둡 클러스터 다운시 쿼리 자동 취소 기능
- 하둡 Namenode HA 기능과 연계
▪ 케르베로스 연결성 강화 (SELECT KERBEROS_HDFS_CONFIG_CHECK(); 제공)
▪ 클라우데라 매니저와 연계
15. 하둡 연계 – Parquet Export
15
오픈 파일 포맷 지원 확대
▪ 하둡과의 긴밀한 연계를 위한 하둡 오픈 파일 포맷인 Parquet Write 지원
▪ 효율적인 ILM 정책 수립 효과 및 데이터 사이언스 기술과의 유기적 연계
▪ 사용방법
- 관련 파라미터:
• Column compression – Snappy (default), Gzip, Uncompressed
• Destination directory – 유효한 HDFS 경로
• Row group size – 64 MB (default) >0 <=512 MB
EXPORT TO PARQUET(directory='', <optional parameters>) <optional OVER()> AS <select query>;
16. Kafka 연계 개선 사항
16
카프카 기능의 고도화
▪ 카프카 병렬 적재 처리 기능 개선
▪ SSL 지원
▪ Schemaless 지원
▪ 상태 표시 기능으로 사용성 증대
COPY table_name source kafkasource(
stream='example|0|0',
stop_on_eof=true,
duration=interval '10 seconds')
parser
KafkaAvroParser( schema_registry_url='http://sch
ema-registry-url' );
17. Spark 연계 개선 사항
17
▪ Spark 2.0 ~ 2.1 연계 지원
▪ 기능 특장점
- 버티카의 기능을 활용한 적재, 변환 등의 기술 사용
- 버티카의 SQL 고급 엔진 활용 가능
- Spark 환경의 분석 수행을 위해서는 Spark 기술로
버티카에 존재하는 데이터에 작업을 수행하는 것이 가능
- Spark 도구 및 버티카를 통한 대시보드 등에 연계 가능
Executor
Executor
Task
Task
Task
Task
Task
Task
RDD
Dataframe
Vertica Table Data Segment
Node 1
Vertica Table Data Segment
Node 2
Vertica Table Data Segment
Node 3
WORKER NODE
WORKER NODE
Partition
Partition
Partition
Partition
Partition
Partition
Vertica
18. 머신 러닝 알고리즘의 확대
18
▪ 분석 알고리즘의 추가
- SVM
- Random Forest
▪ 데이터 정재 알고리즘의 추가
- APPROXIMATE_PERCENTILE()
- IMPUTE()
- NORMALIZE_FIT(), APPLY_NORMALIZE(), REVERSE_NORMALIZE()
▪ 함수 최적화 수행
- 오버피팅에 대한 알고리즘 개선
20. 클라우드 지원: Amazon S3 확대
Vertica Cluster
Backup/Restore
Amazon S3
Vertica Cluster
QUERY (join)
ORC / Parquet DataAmazon S3
기능
• S3로의 백업 수행
• 버티카에서 백업 수행 가능
특장점
• 클라우드에서의 기능 최대 활용
ORC / Parquet Data
기능
• S3 의 ORC/Parquet External Table 선언
• 머신러닝, JOIN 등 사용 가능
특장점
• S3를 데이터 레이크 저장소로 활용 가능
CREATE EXTERNAL TABLE t1
( a int,b int,c varchar, d varchar)
AS COPY FROM 's3://AWS_VER/partition1/e=1/*'
PARQUET;
21. Universally Unique Identifier (UUID) 타입
통신 데이터 타입 지원
• 기존 문제점: UUID 데이터에 대해 효율적인 저장 및 빠른 프로세싱을 위해
Native Data Type의 필요
• 기능: Python, ODBC, JDBC, ADO.NET, vsql 등 모든 클라이언트가 새로운
버티카 데이터 타입을 지원
• 장점: 저장 공간 효율성 및 프로세싱 성능
• 예시:
CREATE TABLE document (id UUID, title VARCHAR(100));
INSERT INTO document VALUES (‘6bbf0744-74b4-46b9-bb05-53905d4538e7’,
‘Vertica in the Valley’);
INSERT INTO document SELECT uuid_generate(), ‘Vertica in Europe’;
COPY document FROM STDIN;
88888888-4444-4444-4444-121212121212 |Vertica Boston
.
SELECT * FROM document;
id | title
-------------------------------------|--------------------------------------
-------------
6bbf0744-74b4-46b9-bb05-53905d4538e7 | Vertica in the Valley
56g3f62d-bde4-75ef-a6f2-61e5dab39149 | Vertica in Europe
88888888-4444-4444-4444-121212121212 | Vertica Boston
22. • 클라우드 이코노믹스 구현 아키텍처
• Compute와 Storage 분리
• 영구 데이터는 S3에, 데이터 디스크 캐싱을 EC2-
EBS에 적재
• 다중 서브 클러스터 구성 가능
Eon mode (separation of compute and storage) Beta
Node
Optimizer
Execution Engine
Depot
Node
Optimizer
Execution Engine
Depot
Node
Optimizer
Execution Engine
Depot
ROS on shared storage – in
dedicated AWS S3 bucket
Eon 모드 베타 시작
23. 머신 러닝 기능의 추가
23
대량의 머신러닝 기능 추가
▪ 데이터 적재 기능 추가
- One-hot 인코딩
- 데이터 탐색 알고리즘 추가 (SUMMARIZE_NUMCOL, SUMMARIZE_CATCOL )
▪ 머신 러닝 알고리즘 개선
- L1 regularization 추가 (선형회귀 분석)
- Random Forest 기능 개선
- Enet 정규화 기능 추가 (선형회귀 분석, RF 분석)
▪ 모델 관리 기능
- 다른 데이터셋에 모델 적용 기능
ID Gender
1 Female
2 Male
3 Not specified
4 Female
5 Not specified
ID Female Male Not specified
1 1 0 0
2 0 1 0
3 0 0 1
4 1 0 0
5 0 0 1
One-hot
encoding
24. 그 외 기능 개선
24
▪ LAP(Live Aggregation Projection) 기능 개선
▪ 백업 및 복구 기능 개선 (백업 기반 업그레이드 기능 추가)
26. Buddy-down 성능 개선
Buddy 프로젝션 성능 문제 개선
기존 문제점
- Late materialisation 지원 불가
9.1.1 개선 사항
▪ 동등 Buddy Projection에 대해 해당 기능 지원
- Non-identical buddy projections 은 제거됨 (9.1)
- Late materialisation 지원
SELECT DELETE COPY
27. 테이블 ActivePartition 을 활용한 Mergeout
ActivePartitionCount 기능
▪ Active Partition (활성화 된 파티션의 상태) 상태의 수
▪ Mergeout 시 활용 방안 - Active partitions: mergeout strata 알고리즘 적용
table-level 값으로 조정하여 database-level 파라미터 값을 오버라이딩 가능
▪ CREATE TABLE … ActivePartitionCount n;
▪ ALTER TABLE … set ActivePartitionCount n | DEFAULT;
카탈로그에서 조회
▪ SELECT table_schema, table_name, active_partition_count FROM
tables;
table_schema | table_name | active_partition_count
-------------+------------+---------------------------
public | table1 | 7
public | table2 |
public | table3 | 3
28. 옵티마이저 개선: Resegment Merge
select
count(distinct a)
from t;Scan Scan Scan
Merge
PipelineGBY(a)
PipelineGBY(null)
…
Scan Scan Scan
Resegment Merge
PipelineGBY(a)
PipelineGBY(null)
PipelineGBY(a)
PipelineGBY(null)
PipelineGBY(a)
PipelineGBY(null)
…
UNION
Pre 9.1 9.1
▪ Reseg Merge에 대한 병렬 처리 형태로 알고리즘 개선
29. 1 2
# of Group By Keys
3
12
10
8
6
4
2
0
Single DA(Integer, low # of distinct values)
ExecutionTime(Seconds)
1 2
# of Group By Keys
3
16
14
12
10
8
6
4
2
0
Single DA(Varchar(8), low # of distinct values)
ExecutionTime(Seconds)
1 2
# of Group By Keys
3
4
2
0
12
10
8
6
Single DA(Integer, high # of distinct values)
ExecutionTime(Seconds)
1 2
# of Group By Keys
3
16
14
12
10
8
6
4
2
0
Single DA(Varchar(8), high # of distinct values)
ExecutionTime(Seconds)
Resegment Merge 성능 결과
Pre 9.1
9.1
Pre 9.1
9.1
Pre 9.1
9.1
Pre 9.1
9.1
30. select g,
count(distinct a), count(distinct b)
,count(distinct c), count(distinct d)
,count(distinct e), count(distinct f)
from T
group by g;
select g,
count(distinct a)
,count(distinct b)
,count(distinct c)
from T
group by g;
Integer Varchar(8)
Column Data Type
Varchar(24)
20
18
16
14
12
10
8
6
4
2
0
MDA(3 DAs)
Pre 9.1
9.1
ExecutionTime(Seconds)
Integer Varchar(8)
Column Data Type
Varchar(24)
5
0
35
30
25
20
15
10
40
MDA(6 DAs)
ExecutionTime(Seconds)
Resegment Merge 성능 결과
Pre 9.1
9.1
31. Machine Learning 함수 지원 플랫폼의 완성
31
Business
Understanding
Data Analysis
&
Understanding
Data
Preparation Modelling Evaluation Deployment
Machine
Learning
Speed
ANSI SQL
Scalability
Massively
Parallel
Processing
Deploy
Anywhere
Outlier
Detection
Normalisation
Imbalanced
Data
Processing
Sampling
Missing Value
Imputation
And More…
SVM
Random
Forests
Logistic
Regression
Linear
Regression
Ridge
Regression
Naive Bayes
Cross
Validation
And More…
Model-level
Stats
ROC Tables
Error Rate
Lift Table
Confusion
Matrix
R-Squared
MSE
In-Database
Scoring
Speed
Scale
Security
Pattern
Matching
Date/
Time Algebra
Window/
Partition
Date Type
Handling
Sequences
And More…
Sessionise
Time Series
Statistical
Summary
SQL SQLSQL SQLSQL
UNIFIED PLATFORM
V9.1
Enhancements
V9.1.x
Enhancements
32. Eon 모드의 정식 GA
Amazon
Microsoft Azure
Google Cloud
Amazon
S3
First Generation
Using the cloud as a data center (IaaS)
Second Generation
Separation of compute and storage
Use Case
• Savings on data center costs
• Faster deployment
COST SAVINGS
• Hardware depreciation (lease)
• Hardware maintenance
• Software purchase or depreciation
• Software maintenance
• Power consumption
• Data center floor space
• Provisioning time
• Backup infrastructure
• Backup media
• Cost of procurement
Use Case
• Exploit cloud economics
• Variable workloads
COST SAVINGS
• Costs of provisioning for peak workloads
• Then paying for idle capacity during slack workloads
• Cost of paying for compute when not in use
• Rather than Hibernate
• Moving data to handle new workloads
• Rather than spin up a new sub-cluster
34. Vertica 9.2.x 신기능
상세 내용은 9.2.x에서 확인 가능
▪ 버티카 Eon 모드 성능 개선
▪ 관리 콘솔 기능 확대
▪ 하둡 연계 기능 확대
- 오픈 파일 및 Complex Type 지원 추가
▪ Python UDL 기능 확대
▪ Mergeout 기능 개선
▪ Load Balancing 기능 확대
▪ Catalog Size 사이즈 최적화
▪ 머신 러닝 함수 추가
https://www.vertica.com/docs/ReleaseNotes/9.2.x/Vertica_9.2.x_Release_Notes.htm
36. vertica-python
Python 기반 분석가들을 위한 오픈소스
▪ 버티카가 공식적으로 지원하는 첫번째 데이터베이스 클라이언트
▪ Uber가 개발함
▪ 버티카가 파이썬 클라이언트의 변경에 대한 적극적 대응
▪ Python Client for Vertica 다운로드
- https://github.com/vertica/vertica-python/
37. UDL Functions Python
필터링 수행 예시
▪ CREATE LIBRARY pythonfilterlib AS
‘/path/to/conversion_filter.py’ LANGUAGE ‘Python’;
▪ CREATE FILTER ConversionFilter AS NAME ‘ConversionFilterFactory’
LIBRARY pythonfilterlib;
▪ COPY foo FROM ‘/data/foo.csv.gz’ FILTER
ConversionFilter(src_encoding = ‘gzip’, dst_encoding = ‘utf-8’);
38. Vertica ML Python
38
• Python library that exposes sci-kit like
functionality
• Data stored in Vertica, thus taking
advantage Vertica’s and push all heavy
computation to VERTICA
• Can be used for data preparation, data
exploration i ML
• uses a ‘pipeline’ mechanism to
sequentialize data transformation…
https://github.com/vertica/Vertica-ML-Python