Hatena::ブログ(Diary)

ablog このページをアンテナに追加 RSSフィード Twitter

2017-04-24

pyenv で Python のバージョンを切替えて使う

pyenv を使って複数のバージョンの Pythonインストールして切替える方法をメモ。


pyenv とは

複数バージョンの Pythonインストールしてコマンド一発で使うバージョンを切替えることができるツール。

pyenv lets you easily switch between multiple versions of Python. It's simple, unobtrusive, and follows the UNIX tradition of single-purpose tools that do one thing well.

This project was forked from rbenv and ruby-build, and modified for Python.

f:id:yohei-a:20170424184508p:image

pyenv does...

  • Let you change the global Python version on a per-user basis.
  • Provide support for per-project Python versions.
  • Allow you to override the Python version with an environment variable.
  • Search commands from multiple versions of Python at a time. This may be helpful to test across Python versions with tox.
GitHub - pyenv/pyenv: Simple Python version management

pyenv をインストールする

$ brew install pyenv
  • ~/.zshrc に以下を追記
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
$ source ~/.zshrc

Pythonインストールする

$ pyenv install --list
$ pyenv install 3.5.0
$ pyenv install 2.7.13

バージョンを切替える

pyenv global <バージョン> とすると全体に、pyenv local に<バージョン> するとそのカレントディレクトリに反映される。一度、設定すると永続化される。

$ pyenv versions 
  system
* 2.7.13 (set by /Users/******/.pyenv/version)
  3.5.0
  • 3.5.0 に切替える
$ pyenv global 3.5.0
$ pyenv version
3.5.0 (set by /Users/*******/.pyenv/version)
  • 2.7.13 に切替える
$ pyenv global 2.7.13
$ pyenv version
2.7.13 (set by /Users/******/.pyenv/version)

環境


参考

2017-04-21

Amazon Redshift の接続数の上限

クラスターに対して同時に可能なユーザー接続の数は 500 です。詳細については、「Amazon Redshift Cluster Management Guide」の「クラスターへの接続」を参照してください。

Amazon Redshift における制限 - Amazon Redshift

2017-04-20

列指向データベースのページのデータ構造

行指向データベースは行単位でページ(Oracle Database でいうデータブロック)にデータを格納しているのに対して、列指向データベースは列ごとにページに格納している。クエリ実行時に結果セットを返す際に列別にバラバラのページに格納されているデータをどうやってタプル(レコード)に復元している*1のかと思ったがやはり行IDのようなものを持っているようだ。

行ID は C-Store では pid、MonetDB では BAT(Binary Association Tables) の oid と呼ばれている。

The Design and Implementation of Modern Column-Oriented Database Systems

f:id:yohei-a:20170420230742p:image:w640

  • NSM(N-ary Storage Model): 行方向でブロック(ページ)にデータを格納する方式
  • DSM(Decomposition Storage Model): 列方向でブロック(ページ)にデータを格納する方式

f:id:yohei-a:20170420233150p:image:w360

C-Store の pid や MonetDB の oid のような ID 以外に Join Index という手法もある。

具体的な実装は C-Store のソースコードで調べることができる。


さらに詳しくは諸橋さんの以下のエントリで紹介されている

VLDB 2009 Tutorial on Column-Stores *1 が表示されたとき、笑ってしまい「わたしの教科書です、教科書」と言ってしまった appengine ja night #21 *2。

Google BigQueryなどの仕組みを知りたいときの列指向データベースの説明に - wmo6hash::blog

この大作スライド参照。


https://www.cs.duke.edu/courses/fall01/cps216/lectures/10-physical.pdf もシンプルで良い資料。

NSM = N-ary Storage Model

DSM = Decomposition Storage Model


補足

C-Store はあのマイケル・ストーンブレーカー教授が産んだ列指向データベースで、商業的にも成功している Vertica(HP社) のルーツです。

ストーンブレーカー教授と一緒にこの論文を書いている Daniel Abadi さんは上の VLDB 2009 Tutorial on Column-Stores を書いているうちの一人でもあり、分かりやすい資料を書かれているので要チェックです。


MonetDB については以下参照


参考

Amazon Aurora に MySQL Client on macOS から接続する

インストール

$ brew install mysql --client-only
  • バージョンを確認する
$ mysql --version
mysql  Ver 14.14 Distrib 5.7.18, for osx10.12 (x86_64) using  EditLine wrapper

Amazon Aurora のインスタンスを起動する


接続してみる

  • Amazon Aurora に接続する
$ mysql -h mydbinstance-cluster.cluster-******.us-east-1.rds.amazonaws.com -u master -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 55
Server version: 5.6.10 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.20 sec)
mysql> create database test;
Query OK, 1 row affected (0.17 sec)


mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.16 sec)
mysql> use test;
Database changed
mysql> create table test(col1 int, col2 varchar(255));
Query OK, 0 rows affected (0.18 sec)
mysql> insert into test(col1, col2) values(1, '  Work hard, Have fun, Make History!!  ');
Query OK, 1 row affected (0.17 sec)

mysql> insert into test(col1, col2) values(2, 'Work hard, Have fun, Make History!!');
Query OK, 1 row affected (0.17 sec)
  • insert した行を確認する
mysql> select * from test;
+------+-----------------------------------------+
| col1 | col2                                    |
+------+-----------------------------------------+
|    1 |   Work hard, Have fun, Make History!!   |
|    2 | Work hard, Have fun, Make History!!     |
+------+-----------------------------------------+
2 rows in set (0.17 sec)
  • もう1行 insert して確認してみる
mysql> insert into test(col1, col2) values(1, '  Work hard, Have fun, Make History!!                 ');
Query OK, 1 row affected (0.16 sec)

mysql> select * from test;
+------+--------------------------------------------------------+
| col1 | col2                                                   |
+------+--------------------------------------------------------+
|    1 |   Work hard, Have fun, Make History!!                  |
|    2 | Work hard, Have fun, Make History!!                    |
|    1 |   Work hard, Have fun, Make History!!                  |
+------+--------------------------------------------------------+
3 rows in set (0.18 sec)

参考

Github のリポジトリを削除する方法

f:id:yohei-a:20170420175506p:image:w640

  • リポジトリ名を入力し、"I understand the consequences, delete this repository" をクリック

f:id:yohei-a:20170420175456p:image:w640


参考

git-secrets で Github に AWS の Credential を公開してしまわないようにする

git-secrets というツールで、誤って AWS の Credential を GitHub に公開してしまわないようにする。


$ brew install git-secrets
  • 既存プロジェクトにフックする
$ cd ~/Documents/github/yoheia
$ git secrets --install
&#10003; Installed commit-msg hook to .git/hooks/commit-msg
&#10003; Installed pre-commit hook to .git/hooks/pre-commit
&#10003; Installed prepare-commit-msg hook to .git/hooks/prepare-commit-msg
  • 拒否設定を行う
$ git secrets --register-aws --global
  • 拒否設定を確認する
$ git secrets --list
secrets.providers git secrets --aws-provider
secrets.patterns [A-Z0-9]{20}
secrets.patterns ("|')?(AWS|aws|Aws)?_?(SECRET|secret|Secret)?_?(ACCESS|access|Access)?_?(KEY|key|Key)("|')?\s*(:|=>|=)\s*("|')?[A-Za-z0-9/\+=]{40}("|')?
secrets.patterns ("|')?(AWS|aws|Aws)?_?(ACCOUNT|account|Account)_?(ID|id|Id)?("|')?\s*(:|=>|=)\s*("|')?[0-9]{4}\-?[0-9]{4}\-?[0-9]{4}("|')?
secrets.allowed AKIAIOSFODNN7EXAMPLE
secrets.allowed wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

環境


参考

Amazon Redshift のプライマリキー


主キー制約、一意制約、外部キー制約は違反してもエラーにならないので注意!

CREATE TABLE文で制約の定義は普通にできるのですが、違反しているデータをINSERTしようとしてもエラーにはならずINSERTできてしまいます。なおNOT NULL制約に違反した場合はちゃんとエラーになります。

プライマリキーおよび外部キーの制約の定義 - Amazon Redshift

これからAmazon Redshiftを始める技術者が注意すべき11つのポイント | Developers.IO

一意性、プライマリキー、および外部キーの制約は情報提供のみを目的としており、Amazon Redshift によって強要されることはありません。ただし、プライマリキーと外部キーはプランニング時のヒントとして使用されます。アプリケーションの ETL プロセスまたは他の何らかのプロセスによってこれらのキーの整合性が強要される場合は、これらのキーを宣言する必要があります。

たとえば、クエリプランナーは特定の統計計算でプライマリキーと外部キーを使用して、サブクエリの非相関技術に影響を与える一意性および参照関係を推論したり、多数の結合を指示したり、冗長な結合を回避したりします。

プランナはこれらのキーの関係を活用しますが、Amazon Redshift テーブルのすべてのキーがロード時に有効であることが前提となります。アプリケーションが無効な外部キーまたはプライマリキーを許可する場合、いくつかのクエリが不正な結果を返す可能性があります。たとえば、プライマリキーが一意でない場合、SELECT DISTINCT クエリが重複した行を返すことがあります。有効かどうかわからない場合は、テーブルに対してキーの制約を定義しないでください。一方、有効だとわかっている場合は、プライマリキー、外部キー、および一意性の制約を必ず宣言してください。

Amazon Redshift は、NOT NULL 列の制約を適用します。

制約の定義 - Amazon Redshift

参考

*1:別々のページに格納されているカラムのデータを結合してレコード(タプル)に何をキーに復元するのか?

2017-04-18

AWSコンソールのデフォルトリージョンを設定する

URLパラメータでリージョンを指定すれば良い。以下の例は東京リージョンを指定している。

https://console.aws.amazon.com/console/home?ap-northeast-1#

リージョンリージョンとアベイラビリティーゾーン - Amazon Elastic Compute Cloud で確認できる。


参考

https://console.aws.amazon.com/console/home?region=ap-northeast-1

のようにリージョン指定したブックマークを使っています。別リージョン選択してサインアウトしてからでも、このブックマークからだとサインイン後に意図通り東京リージョンのコンソールが表示されています。

AWS(Amazon Web Services) - AWSデフォルトのリージョンを東京にしたい(29291)|teratail

Mac から Amazon Redshift にコマンドラインツール(psql)で接続する

PostgreSQLインストール

$ brew install postgresql
$ psql --version
postgres (PostgreSQL) 9.6.2

使ってみる

  • 接続する
% psql "host= matrix.***.ap-northeast-1.redshift.amazonaws.com user=neo dbname=zion port=5439"
Password: 
psql (9.6.2, server 8.0.2)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: on)
Type "help" for help.
  • DB一覧を表示する
zion=# \l
                  List of databases
     name     | owner | encoding | access privileges 
--------------+-------+----------+-------------------
 dev          | rdsdb | UNICODE  | 
 padb_harvest | rdsdb | UNICODE  | 
 template0    | rdsdb | UNICODE  | rdsdb=CT/rdsdb
 template1    | rdsdb | UNICODE  | rdsdb=CT/rdsdb
 zion         | neo   | UNICODE  | 
(5 rows)
zion=# \d
         List of relations
 schema |   name    | type  | owner 
--------+-----------+-------+-------
 public | customer  | table | neo
 public | dwdate    | table | neo
 public | lineorder | table | neo
 public | part      | table | neo
 public | supplier  | table | neo
(5 rows)
  • 終了する
zion-# \q

参考

2017-04-16

Amazon Redshift を使ってみる

Redshift クラスターを作成する


クライアント(JackDB)から接続する

  • Log in | JackDBアカウントを作成する。
  • [+ Add a data source] を選択する
    • New Data Source: Amazon Redshift
    • Name: dc1large4node
    • Host: AWSコンソールのエンドポイント(ポート番号「5439」除く)
    • Database: zion
    • Username: neo
    • Password: 上で設定したパスワード

JackDBからRedshiftへのアクセスを許可する


SQLを実行してみる

select * from pg_class limit 100;

f:id:yohei-a:20170416191306p:image


チュートリアル: テーブル設計のチューニング - Amazon Redshift を試してみる

ソートキー、分散キー、圧縮を使用しないケース
CREATE TABLE part 
(
  p_partkey     INTEGER NOT NULL,
  p_name        VARCHAR(22) NOT NULL,
  p_mfgr        VARCHAR(6) NOT NULL,
  p_category    VARCHAR(7) NOT NULL,
  p_brand1      VARCHAR(9) NOT NULL,
  p_color       VARCHAR(11) NOT NULL,
  p_type        VARCHAR(25) NOT NULL,
  p_size        INTEGER NOT NULL,
  p_container   VARCHAR(10) NOT NULL
);

CREATE TABLE supplier 
(
  s_suppkey   INTEGER NOT NULL,
  s_name      VARCHAR(25) NOT NULL,
  s_address   VARCHAR(25) NOT NULL,
  s_city      VARCHAR(10) NOT NULL,
  s_nation    VARCHAR(15) NOT NULL,
  s_region    VARCHAR(12) NOT NULL,
  s_phone     VARCHAR(15) NOT NULL
);

CREATE TABLE customer 
(
  c_custkey      INTEGER NOT NULL,
  c_name         VARCHAR(25) NOT NULL,
  c_address      VARCHAR(25) NOT NULL,
  c_city         VARCHAR(10) NOT NULL,
  c_nation       VARCHAR(15) NOT NULL,
  c_region       VARCHAR(12) NOT NULL,
  c_phone        VARCHAR(15) NOT NULL,
  c_mktsegment   VARCHAR(10) NOT NULL
);

CREATE TABLE dwdate 
(
  d_datekey            INTEGER NOT NULL,
  d_date               VARCHAR(19) NOT NULL,
  d_dayofweek          VARCHAR(10) NOT NULL,
  d_month              VARCHAR(10) NOT NULL,
  d_year               INTEGER NOT NULL,
  d_yearmonthnum       INTEGER NOT NULL,
  d_yearmonth          VARCHAR(8) NOT NULL,
  d_daynuminweek       INTEGER NOT NULL,
  d_daynuminmonth      INTEGER NOT NULL,
  d_daynuminyear       INTEGER NOT NULL,
  d_monthnuminyear     INTEGER NOT NULL,
  d_weeknuminyear      INTEGER NOT NULL,
  d_sellingseason      VARCHAR(13) NOT NULL,
  d_lastdayinweekfl    VARCHAR(1) NOT NULL,
  d_lastdayinmonthfl   VARCHAR(1) NOT NULL,
  d_holidayfl          VARCHAR(1) NOT NULL,
  d_weekdayfl          VARCHAR(1) NOT NULL
);
CREATE TABLE lineorder 
(
  lo_orderkey          INTEGER NOT NULL,
  lo_linenumber        INTEGER NOT NULL,
  lo_custkey           INTEGER NOT NULL,
  lo_partkey           INTEGER NOT NULL,
  lo_suppkey           INTEGER NOT NULL,
  lo_orderdate         INTEGER NOT NULL,
  lo_orderpriority     VARCHAR(15) NOT NULL,
  lo_shippriority      VARCHAR(1) NOT NULL,
  lo_quantity          INTEGER NOT NULL,
  lo_extendedprice     INTEGER NOT NULL,
  lo_ordertotalprice   INTEGER NOT NULL,
  lo_discount          INTEGER NOT NULL,
  lo_revenue           INTEGER NOT NULL,
  lo_supplycost        INTEGER NOT NULL,
  lo_tax               INTEGER NOT NULL,
  lo_commitdate        INTEGER NOT NULL,
  lo_shipmode          VARCHAR(10) NOT NULL
);
  • データロード(圧縮なし)
    • <Your-Access-Key-ID> と <Your-Secret-Access-Key> はAWS アカウント認証情報に置き換える。
    • IAM ユーザー作成時にダウンロードまたはメモしておいた情報を使う。
copy customer from 's3://awssampledbuswest2/ssbgz/customer' 
credentials 'aws_access_key_id=<Your-Access-Key-ID>;aws_secret_access_key=<Your-Secret-Access-Key>' 
gzip compupdate off region 'us-west-2';

copy dwdate from 's3://awssampledbuswest2/ssbgz/dwdate' 
credentials 'aws_access_key_id=<Your-Access-Key-ID>;aws_secret_access_key=<Your-Secret-Access-Key>' 
gzip compupdate off region 'us-west-2';

copy lineorder from 's3://awssampledbuswest2/ssbgz/lineorder' 
credentials 'aws_access_key_id=<Your-Access-Key-ID>;aws_secret_access_key=<Your-Secret-Access-Key>'
gzip compupdate off region 'us-west-2';

copy part from 's3://awssampledbuswest2/ssbgz/part' 
credentials 'aws_access_key_id=<Your-Access-Key-ID>;aws_secret_access_key=<Your-Secret-Access-Key>'
gzip compupdate off region 'us-west-2';

copy supplier from 's3://awssampledbuswest2/ssbgz/supplier' 
credentials 'aws_access_key_id=<Your-Access-Key-ID>;aws_secret_access_key=<Your-Secret-Access-Key>'
gzip compupdate off region 'us-west-2';
  • テーブルに想定通りの件数がロードされたことを確認する。
select count(*) from LINEORDER;
select count(*) from PART;
select count(*) from  CUSTOMER;
select count(*) from  SUPPLIER;
select count(*) from  DWDATE;
select stv_tbl_perm.name as table, count(*) as mb
from stv_blocklist, stv_tbl_perm
where stv_blocklist.tbl = stv_tbl_perm.id
and stv_blocklist.slice = stv_tbl_perm.slice
and stv_tbl_perm.name in ('lineorder','part','customer','dwdate','supplier')
group by stv_tbl_perm.name
order by 1 asc;
table         mb
customer 224
dwdate    160
lineorder  34,346
part          120
supplier   104
  • クエリパフォーマンスを計測する
    • 1回目はコンパイル時間が含まれるため2回実行して2回目をとる。
-- Query 1
-- Restrictions on only one dimension. 
select sum(lo_extendedprice*lo_discount) as revenue
from lineorder, dwdate
where lo_orderdate = d_datekey
and d_year = 1997 
and lo_discount between 1 and 3 
and lo_quantity < 24;

-- Query 2
-- Restrictions on two dimensions 

select sum(lo_revenue), d_year, p_brand1
from lineorder, dwdate, part, supplier
where lo_orderdate = d_datekey
and lo_partkey = p_partkey
and lo_suppkey = s_suppkey
and p_category = 'MFGR#12'
and s_region = 'AMERICA'
group by d_year, p_brand1
order by d_year, p_brand1;

-- Query 3
-- Drill down in time to just one month 

select c_city, s_city, d_year, sum(lo_revenue) as revenue 
from customer, lineorder, supplier, dwdate
where lo_custkey = c_custkey
and lo_suppkey = s_suppkey
and lo_orderdate = d_datekey
and (c_city='UNITED KI1' or
c_city='UNITED KI5')
and (s_city='UNITED KI1' or
s_city='UNITED KI5')
and d_yearmonth = 'Dec1997'
group by c_city, s_city, d_year
order by d_year asc, revenue desc;

f:id:yohei-a:20170416195611p:image


ソートキー、分散キー、圧縮を使用するケース
drop table part cascade;
drop table supplier cascade;
drop table customer cascade;
drop table dwdate cascade;
drop table lineorder cascade;
CREATE TABLE part (
  p_partkey     	integer     	not null	sortkey distkey,
  p_name        	varchar(22) 	not null,
  p_mfgr        	varchar(6)      not null,
  p_category    	varchar(7)      not null,
  p_brand1      	varchar(9)      not null,
  p_color       	varchar(11) 	not null,
  p_type        	varchar(25) 	not null,
  p_size        	integer     	not null,
  p_container   	varchar(10)     not null
);

CREATE TABLE supplier (
  s_suppkey     	integer        not null sortkey,
  s_name        	varchar(25)    not null,
  s_address     	varchar(25)    not null,
  s_city        	varchar(10)    not null,
  s_nation      	varchar(15)    not null,
  s_region      	varchar(12)    not null,
  s_phone       	varchar(15)    not null)
diststyle all;

CREATE TABLE customer (
  c_custkey     	integer        not null sortkey,
  c_name        	varchar(25)    not null,
  c_address     	varchar(25)    not null,
  c_city        	varchar(10)    not null,
  c_nation      	varchar(15)    not null,
  c_region      	varchar(12)    not null,
  c_phone       	varchar(15)    not null,
  c_mktsegment      varchar(10)    not null)
diststyle all;

CREATE TABLE dwdate (
  d_datekey            integer       not null sortkey,
  d_date               varchar(19)   not null,
  d_dayofweek	      varchar(10)   not null,
  d_month      	    varchar(10)   not null,
  d_year               integer       not null,
  d_yearmonthnum       integer  	 not null,
  d_yearmonth          varchar(8)	not null,
  d_daynuminweek       integer       not null,
  d_daynuminmonth      integer       not null,
  d_daynuminyear       integer       not null,
  d_monthnuminyear     integer       not null,
  d_weeknuminyear      integer       not null,
  d_sellingseason      varchar(13)    not null,
  d_lastdayinweekfl    varchar(1)    not null,
  d_lastdayinmonthfl   varchar(1)    not null,
  d_holidayfl          varchar(1)    not null,
  d_weekdayfl          varchar(1)    not null)
diststyle all;

CREATE TABLE lineorder (
  lo_orderkey      	    integer     	not null,
  lo_linenumber        	integer     	not null,
  lo_custkey           	integer     	not null,
  lo_partkey           	integer     	not null distkey,
  lo_suppkey           	integer     	not null,
  lo_orderdate         	integer     	not null sortkey,
  lo_orderpriority     	varchar(15)     not null,
  lo_shippriority      	varchar(1)      not null,
  lo_quantity          	integer     	not null,
  lo_extendedprice     	integer     	not null,
  lo_ordertotalprice   	integer     	not null,
  lo_discount          	integer     	not null,
  lo_revenue           	integer     	not null,
  lo_supplycost        	integer     	not null,
  lo_tax               	integer     	not null,
  lo_commitdate         integer         not null,
  lo_shipmode          	varchar(10)     not null
);
  • データロード(圧縮あり)
copy customer from 's3://awssampledbuswest2/ssbgz/customer' 
credentials 'aws_access_key_id=<Your-Access-Key-ID>;aws_secret_access_key=<Your-Secret-Access-Key>' 
gzip region 'us-west-2';

copy dwdate from 's3://awssampledbuswest2/ssbgz/dwdate' 
credentials 'aws_access_key_id=<Your-Access-Key-ID>;aws_secret_access_key=<Your-Secret-Access-Key>' 
gzip region 'us-west-2';

copy lineorder from 's3://awssampledbuswest2/ssbgz/lineorder' 
credentials 'aws_access_key_id=<Your-Access-Key-ID>;aws_secret_access_key=<Your-Secret-Access-Key>'
gzip region 'us-west-2';

copy part from 's3://awssampledbuswest2/ssbgz/part' 
credentials 'aws_access_key_id=<Your-Access-Key-ID>;aws_secret_access_key=<Your-Secret-Access-Key>'
gzip region 'us-west-2';

copy supplier from 's3://awssampledbuswest2/ssbgz/supplier' 
credentials 'aws_access_key_id=<Your-Access-Key-ID>;aws_secret_access_key=<Your-Secret-Access-Key>'
gzip region 'us-west-2';
select stv_tbl_perm.name as "table", count(*) as "blocks (mb)"
from stv_blocklist, stv_tbl_perm
where stv_blocklist.tbl = stv_tbl_perm.id
and stv_blocklist.slice = stv_tbl_perm.slice
and stv_tbl_perm.name in ('customer', 'part', 'supplier', 'dwdate', 'lineorder')
group by stv_tbl_perm.name
order by 1 asc;
table          blocks(mb)
customer  604
dwdate     160
lineorder   26,359
part           200
supplier    236

圧縮が効いてブロック数が少なくなっている

select trim(name) as table, slice, sum(num_values) as rows, min(minvalue), max(maxvalue)
from svv_diskusage
where name in ('customer', 'part', 'supplier', 'dwdate', 'lineorder') 
and col =0
group by name, slice
order by name, slice;
-- Query 1
-- Restrictions on only one dimension. 
select sum(lo_extendedprice*lo_discount) as revenue
from lineorder, dwdate
where lo_orderdate = d_datekey
and d_year = 1997 
and lo_discount between 1 and 3 
and lo_quantity < 24;

-- Query 2
-- Restrictions on two dimensions 

select sum(lo_revenue), d_year, p_brand1
from lineorder, dwdate, part, supplier
where lo_orderdate = d_datekey
and lo_partkey = p_partkey
and lo_suppkey = s_suppkey
and p_category = 'MFGR#12'
and s_region = 'AMERICA'
group by d_year, p_brand1
order by d_year, p_brand1;

-- Query 3
-- Drill down in time to just one month 

select c_city, s_city, d_year, sum(lo_revenue) as revenue 
from customer, lineorder, supplier, dwdate
where lo_custkey = c_custkey
and lo_suppkey = s_suppkey
and lo_orderdate = d_datekey
and (c_city='UNITED KI1' or
c_city='UNITED KI5')
and (s_city='UNITED KI1' or
s_city='UNITED KI5')
and d_yearmonth = 'Dec1997'
group by c_city, s_city, d_year
order by d_year asc, revenue desc;

f:id:yohei-a:20170416212122p:image

参考