这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

入门

欢迎使用“入门”。本指南将指导您完成配置 Vertica Analytics Platform 数据库和运行典型查询的过程。

有关如何安装 Vertica、创建数据库和加载数据的简短教程,请参阅 快速入门指南

1 - 使用本指南

本指南介绍如何设置 Vertica 数据库并运行用来执行常见数据库任务的简单查询。

本指南的目标读者

本指南的目标读者是希望了解 Vertica 数据库创建和运行知识的任何人。本指南并未要求目标读者在此阶段具备专门的数据库知识,但开始运行查询时,掌握有关基本 SQL 命令的基本知识将很有帮助。

有关如何安装 Vertica、创建数据库和加载数据的简短教程,请参阅 快速入门指南

先决条件

本指南中的示例要求满足以下条件之一:

  • Vertica 已安装在一台主机或主机群集上。Vertica 建议此群集中至少有三个主机。

  • Vertica 已安装在虚拟机 (VM) 上。

有关安装的进一步说明,请参阅安装 Vertica

访问数据库

您将通过 SSH 客户端或 Linux 控制台中的终端实用程序(例如 vsql)访问数据库。在本指南中,您将使用以下用户界面:

2 - 快速入门指南

此部分包含设置 Vertica 安装环境、加载数据和使用各种客户端驱动程序的简短指南。

文档中的示例使用 $ 表示终端提示,使用 => 表示 vsql 提示。

该图表显示了快速入门指南中的六个步骤:准备安装环境、安装 Vertica、创建数据库和用户、加载示例数据、监控数据库和连接客户端

2.1 - 准备安装环境

在安装 Vertica 之前,必须配置您的环境。

要在内部环境中运行 Vertica Enterprise,请按照下面编号的说明进行操作。

要改为在虚拟机中运行 Vertica,请参阅Vertica 社区版 (CE)

  1. 将安装文件复制到您的主目录。该示例显示了用于 CentOS/RHEL 的 rpm 文件,但您可能有用于 Debian 的 deb 文件。

    
    $ scp vertica-10.1.0.x86_64.RHEL6.rpm /~
    
  2. 标识当前节点的 IP 地址。

    $ ipconfig -a
    

    如果在您的路径中找不到 ipconfig 命令,可以尝试使用路径 /sbin/ipconfig/usr/sbin/ipconfig 直接运行它。如果这些都不起作用,请使用 ip 命令:

    $ ip a
    
  3. 确保软件包是最新的。根据您的发行版运行命令。

    在 CentOS 和 RedHat 上:

    $ sudo yum update -y
    

    在 openSUSE 上:

    $ sudo zypper up
    

    在 Debian 和 Ubuntu 上:

    $ sudo apt-get update && sudo apt-get upgrade
    
  4. 将 swappiness 设置为 1(推荐)。

    $ sudo systemctl vm.swappiness=1
    
  5. 验证 SELinux 是在许可模式下运行还是被禁用。

    $ sudo setenforce 0
    
  6. 禁用系统防火墙。

    $ sudo systemctl mask firewalld
    $ sudo systemctl disable firewalld
    $ sudo systemctl stop firewalld
    
  7. 安装 Vertica

2.2 - 安装 Vertica

  1. 要从二进制文件安装,请根据您的发行版运行命令。

    在 CentOS、RedHat 和 openSUSE 上:

    $ sudo rpm -Uvh vertica-10.1.0.x86_64.RHEL6.rpm
    

    在 Debian 和 Ubuntu 上:

    $ sudo dpkg -i vertica-10.1.0.x86_64.deb
    
  2. 运行安装脚本。以下命令指定 localhost、rpm、数据库管理员和主目录。

    $ sudo /opt/vertica/sbin/install_vertica -s localhost -r vertica-10.1.0.x86_64.RHEL6.rpm
    -u dbadmin -g dbadmin -d /home/dbadmin -p vertica -L -Y
    
  3. 切换到新创建的 dbadmin 用户。

    $ su dbadmin
    
  4. 运行 admintools 并接受 EULA 和操作许可证。

    $ admintools
    
  5. 创建数据库和用户。

2.3 - 加载示例数据

Vertica 提供了多种解决方案,用于加载包含结构化和非结构化数据以及多种格式的文件。

创建示例数据文件

使用以下内容创建一个名为 cities.csv 的示例 CSV 文件并将其保存到 /home/dbadmin/cities.csv。

City,State,Zip,Population
Boston,MA,02108,694583
Chicago,IL,60601,2705994
Seattle,WA,98101,744955
Dallas,TX,75201,1345047
New York,NY,10001,8398748

从文件加载结构化数据

  1. 运行 vsql。

    $ vsql
    
  2. 创建 cities 表。

    => CREATE TABLE cities (
    city       varchar(20),
    state      char(2),
    zip        int,
    population int
    );
    
  3. 使用 COPY 语句从 cities.csv 文件加载数据。以下命令在主目录中记录异常和拒绝。

    => COPY cities FROM LOCAL '/home/dbadmin/cities.csv' DELIMITER ',' NULL '' EXCEPTIONS '/home/dbadmin/cities_exceptions.log'
    REJECTED DATA '/home/dbadmin/cities_rejections.log';
    
  4. 查看拒绝日志以了解哪些数据被排除在外。在此处,标题被排除在外。

    $ cat /home/dbadmin/cities_rejections.log
    
    City,State,Zip,Population
    
  5. 查看异常以了解有关错误的详细信息。在此例中,标题未通过 Vertica 的整数数据类型验证。

    $ cat /home/dbadmin/cities_exceptions.log
    
    COPY: Input record 1 has been rejected (Invalid integer format 'Zip' for column 3 (zip)).
    Please see /home/dbadmin/cities_rejections.log, record 1 for the rejected record. This record was record 1 from cities.csv
    
  6. 要解决此问题,请将 SKIP 1 添加到原始 COPY 语句。这将排除第一行。

    => COPY cities FROM LOCAL '/home/dbadmin/cities.csv' DELIMITER, 'NULL'
    EXCEPTIONS '/home/dbadmin/cities_exceptions.log'
    REJECTED DATA '/home/dbadmin/cities_rejections.log' SKIP 1;
    

使用 Flex 表加载非结构化数据

为了从其他来源加载数据,Vertica 使用 Flex 表。Flex 表允许您加载非结构化或“半结构化”数据,而无需创建架构或列定义,从而简化了数据加载。

支持的格式包括:

  • Avro 数据

  • CEF

  • CSV

  • 分隔

  • JSON

  1. 创建名为 cities_flex 的表。请注意它是如何排除列名或数据类型的。

    => CREATE FLEXIBLE TABLE cities_flex();
    
  2. 将 CSV 文件加载到表中。

    => COPY cities_flex FROM '/source/cities.csv' PARSER FDELIMITEDPARSER (delimiter=',');
    
  3. 查询 cities_flex 表,从原始 CSV 文件指定列名。

    => SELECT city, state FROM cities_flex;
    

2.4 - 监控数据库

此页面包含一组对监控数据库有用的通用 SQL 语句。

检查磁盘空间

检查表使用的磁盘空间。

=> SELECT projection_schema, anchor_table_name, to_char(sum(used_bytes)/1024/1024/1024,'999,999.99')
as disk_space_used_gb FROM
projection_storage
GROUP by projection_schema, anchor_table_name ORDER by
disk_space_used_gb desc limit 50;

检查已使用的总磁盘空间。

=> SELECT to_char(sum(used_bytes)/1024/1024/1024,'999,999.99') AS gb FROM projection_storage;

检查可用磁盘空间量。

=> SELECT to_char(sum(disk_space_free_mb)/1024,'999,999,999') AS
disk_space_free_gb, to_char(sum(disk_space_used_mb)/1024,'999,999,999') AS
disk_space_used_gb FROM disk_storage;

调整数据类型

将 Zip 和 Population 列从 VARCHAR 更改为 INT。

=> UPDATE cities_flex_keys set data_type_guess='int' WHERE key_name='Zip';
=> UPDATE cities_flex_keys set data_type_guess='int' WHERE key_name='Population';
=> COMMIT;

用新的数据类型刷新 cities_flex_view

=> SELECT build_flextable_view('cities_flex');

实体化 Flex 表

将 Flex 表和所有列实体化为持久 Vertica 表。

=> CREATE TABLE cities AS SELECT * from cities_flex_view;

查看用户和角色信息

查看用户信息。

=> SELECT user_name, is_super_user, resource_pool, memory_cap_kb, temp_space_cap_kb, run_time_cap FROM users;

标识用户。

=> SELECT * FROM user_sessions;

按用户查看查询。

=> SELECT * FROM query_profiles WHERE user_name ILIKE '%dbadmin%';

查看角色。

=> SELECT * FROM roles;

查看数据库信息

查看资源池分配。

=> SELECT user_name, resource_pool FROM users;

查看表信息。

=> SELECT table_name, is_flextable, is_temp_table, is_system_table, count(*) FROM tables GROUP by 1,2,3,4;

查看投影信息。

=> SELECT is_segmented, is_aggregate_projection, has_statistics, is_super_projection, count(*) FROM projections GROUP by 1,2,3,4,5;

查看更新信息。

=> SELECT substr(query, 0, instr(query, '')+1), count(*) from (SELECT transaction_id, statement_id, upper(query::varchar(30000)) as query FROM query_profiles
WHERE regexp_like(query,'^\s*update\s','i')) sq GROUP BY 1 ORDER BY 1;

查看活动事件。

=>SELECT * FROM active_events WHERE event_problem_description NOT ILIKE '%state to UP%';

查看备份。

=> SELECT * FROM database_backups;

查看磁盘存储。

=> SELECT node_name, storage_path, storage_usage, storage_status, disk_space_free_percent FROM disk_storage;

查看长时间运行的查询

=> SELECT query_duration_us/1000000/60 AS query_duration_mins, table_name, user_name, processed_row_count AS rows_processed, substr(query,0,70) FROM query_profiles
ORDER BY query_duration_us DESCLIMIT 250;

查看读取优化存储 (ROS) 容器的大小和计数。

=> SELECT node_name, projection_name, sum(ros_count), sum(ros_used_bytes) FROM projection_storage GROUP BY 1,2 HAVING sum(ros_count) >= 50
ORDER BY 3 DESC LIMIT 250;

查看许可证信息

查看许可证使用情况。

=> SELECT GET_COMPLIANCE_STATUS();

查看数据库如何符合您的许可证。

=> SELECT AUDIT('');

审核数据库以检查它是否符合许可证的原始存储限额。

=> SELECT AUDIT_LICENSE_SIZE();

比较数据库和您的许可证的存储大小。

=> SELECT /*+(license_utilization)*/
audit_start_timestamp,
database_size_bytes / (1024^3) AS database_size_gb,
license_size_bytes / (1024^3) AS license_size_gb, usage_percent
FROM v_catalog.license_audits ORDER BYaudit_start_timestamp DESC LIMIT 30;

2.5 - 连接客户端

Vertica 支持多个第三方客户端。可以在此处找到 Vertica 客户端驱动程序列表。

连接到 DbVisualizer

  1. 下载 DbVisualizer 客户端应用程序

  2. 创建数据库。“数据库 (Database)”菜单 ->“创建数据库连接 (Create Database Connection)”。

  3. 指定连接的名称。

  4. 在“驱动程序 (JDBC)”字段中,指定 Vertica。

  5. 在“数据库服务器 (Database Server)”字段中,指定 IP 地址。

  6. 在“数据库端口 (Database Port)”字段中,指定端口号。

  7. 在“数据库名称 (Database Name)”字段中,指定数据库名称。

  8. 在“数据库用户 ID (Database Userid)”字段中,指定用户名。

  9. 在“数据库密码 (Database Password)”字段中,指定密码。

  10. 使用 "ping" 函数测试连接。

连接到 Tableau

  1. 下载 Tableau

  2. 打开 Tableau 桌面。

  3. 选择服务器连接。

  4. 选择 Vertica 作为服务器类型。

  5. 设置服务器 IP。

  6. 将端口设置为 "vdb"。

  7. 登录数据库。

3 - Vertica 社区版 (CE)

Vertica 社区版 (CE) 是 Vertica 为用户提供的免费受限许可证,以便他们可以亲身体验该平台。它允许您使用最多 1TB 的数据部署多达三个节点。

接受社区版 (CE) 许可证,即视为您同意收集一些匿名的、非识别性的使用数据。这些数据有助于 Vertica 了解客户如何使用产品并开发新功能。我们不会收集任何个人数据。有关收集内容的详细信息,请参阅社区版最终用户许可协议

Vertica 提供了两个使用社区版的选项:

  • CE 容器映像。容器映像需要容器引擎,例如 Docker Desktop。有关安装详细信息,请参阅 Docker 官方文档

  • Vertica 社区版虚拟机 (Vertica CE VM),可从 Vertica 网站下载。

CE 容器映像

CE 映像是 Vertica CE VM 的单节点轻量级替代方案。Vertica 提供了两个获取 CE 容器映像的选项:

CE 容器环境包括以下内容:

  • VMart 示例数据库

  • admintools

  • vsql

  • 开发者库

Vertica CE VM

Vertica CE VM 是一个预配置的 Linux 环境,包括:

  • 带有 VMart 示例数据库的 Vertica 社区版

  • 管理控制台

  • admintools

  • vsql

  • 指导您完成一系列常见任务的教程

有关 Vertica CE VM 中包含的教程的预览,请参阅 Vertica CE VM 用户指南

要下载和安装 Vertica CE VM,请按照 Vertica CE VM 安装指南中的说明进行操作。

4 - Vertica 界面

Vertica 提供工具以快速轻松地执行管理任务:

  • 管理控制台 (MC) 通过浏览器连接提供 Vertica 群集的统一视图。

  • 管理工具提供了一个简单的图形用户界面,供您执行某些任务,例如启动和停止数据库、运行 Database Designer 等。

以下各节提供了有关这两种工具的详细信息。

管理控制台

管理控制台 (MC) 是 Vertica 的浏览器内监控和管理工具。其图形用户界面提供了 Vertica 数据库操作的统一视图。通过用户友好的分步屏幕,可以创建、配置、管理和监控 Vertica 数据库及其相关群集。可以使用 MC 在 Eon 模式或企业模式下操作 Vertica 数据库。可以使用 MC 配置和部署 Vertica Eon 模式数据库。

有关详细说明,请参阅管理控制台

管理工具

如果可行,始终要以数据库管理员帐户 (dbadmin) 在管理主机上运行管理工具。

运行管理工具时,主菜单 (Main Menu) 对话框会显示深蓝色背景,而且顶部带有一个标题。此文档集中使用的屏幕截图只剪切了对话框本身,如以下屏幕截图中所示。

在某些终端窗口中,管理工具界面会响应鼠标单击,但它可能只响应键盘按键操作。下表列出了在管理工具界面中使用按键操作的快速参考:

有关详细信息,请参阅《管理员指南》中的使用管理工具

首次登录后

首次以数据库管理员身份登录并运行管理工具时,请完成以下步骤:

  1. 接受最终用户许可协议 (EULA) 以继续。

    此时会显示窗口,请求从 Micro Focus 网站下载的许可证密钥文件的位置。默认路径是 /tmp/vlicense.dat

  2. 输入许可证密钥的绝对路径,然后选择确定 (OK)

  3. 要返回命令行,请选择退出 (Exit),然后单击确定 (OK)

5 - VMart 示例数据库简介

Vertica 附带了一个名为 VMart 示例数据库的多架构示例数据库。该数据库代表着大型超市 (VMart) 中可能会用到的数据库,可用来访问产品、客户、员工以及网店和实体店信息。使用此示例时,您可以创建、运行、优化和测试多架构数据库。

VMart 数据库含有以下架构:

  • public (在任何新创建的 Vertica 数据库中自动创建)

  • store

  • online_Sales

VMart 数据库位置和脚本

如果您从 RPM 包安装 Vertica,则 VMart 架构安装在 /opt/vertica/examples/VMart_Schema 目录中。此文件夹含有以下脚本文件,可供您迅速入门。将脚本用作您自己的应用程序的模板。

有关 VMart 示例数据库附带的架构、表和查询的详细信息,请参阅附录

6 - 安装和连接至 VMart 示例数据库

执行本节中的步骤,创建功能齐全的多架构 VMart 示例数据库,以运行示例查询。您在单个 Vertica 安装中创建的示例数据库数量仅受系统上可用磁盘空间的限制。但是,Vertica 强烈建议您在一开始时,一次仅创建一个示例数据库,以免造成异常结果。

Vertica 提供了两个示例数据库安装选项:

  • 使用脚本进行快速安装:此选项允许您创建示例数据库并立即开始使用它。使用此方法可绕过架构和表创建过程,而且能立即开始查询。

  • 高级安装。高级选项是使用管理工具界面安装一个既高级又简单的示例数据库。使用此方法可更好地了解数据库创建过程,并实际创建架构、创建表以及加载数据。

6.1 - 使用脚本进行快速安装

用来执行快速安装的脚本位于 /opt/vertica/sbin 中且名为 install_example。此脚本会在默认端口 (5433) 上创建数据库,生成数据,创建架构和默认超投影,以及加载数据。该文件夹也含有一个 delete_example 脚本,它用来停止和删除数据库。

  1. 在终端窗口中,以数据库管理员身份登录。

    $ su dbadmin

    Password: (your password)

  2. 更改至 /examples 目录。

    $ cd /opt/vertica/examples

  3. 运行安装脚本:

    $ /opt/vertica/sbin/install_example VMart

安装后,您应看到以下内容:

[dbadmin@localhost examples]$ /opt/vertica/sbin/install_example VMart
Installing VMart example example database
Mon Jul 22 06:57:40 PDT 2013
Creating Database
Completed
Generating Data. This may take a few minutes.
Completed
Creating schema
Completed
Loading 5 million rows of data. Please stand by.
Completed
Removing generated data files
Example data

示例数据库日志文件 ExampleInstall.txtExampleDelete.txt 会写入 /opt/vertica/examples/log

要开始使用数据库,请继续执行本指南中的连接到数据库。要删除示例数据库,请参阅本指南中的还原主机状态

6.2 - 高级安装

要执行既高级又简单的安装,请设置 VMart 示例数据库环境,然后使用管理工具或管理控制台创建数据库。

高级安装需要执行以下步骤:

6.2.1 - 步骤 1:设置示例环境

  1. 停止计划安装示例数据库的相同主机上运行的所有数据库。

    如果不确定是否有其他数据库正在运行,请运行管理工具,然后选择查看群集状态 (View Cluster State)。State 列应在预先存在的数据库上显示 DOWN 值。

    如果数据库正在运行,请单击管理工具 (Administration Tools) 界面主菜单 (Main Menu) 中的停止数据库 (Stop Database),然后单击确定 (OK)

  2. 在终端窗口中,以数据库管理员身份登录:

    $ su dbadmin
    Password: 
    
  3. 更改至 /VMart_Schema 目录。

    $ cd /opt/vertica/examples/VMart_Schema
    

    按照该教程操作时请勿更改目录。某些步骤要在特定目录中执行。

  4. 运行示例数据生成器。

    
    $ ./vmart_gen
    
  5. 让程序以默认参数运行,您可以在 README 文件中查看这些参数。

    Using default parameters
    datadirectory = ./
    numfiles = 1
    seed = 2
    null = ' '
    timefile = Time.txt
    numfactsalesrows = 5000000
    numfactorderrows = 300000
    numprodkeys = 60000
    numstorekeys = 250
    numpromokeys = 1000
    numvendkeys = 50
    numcustkeys = 50000
    numempkeys = 10000
    numwarehousekeys = 100
    numshippingkeys = 100
    numonlinepagekeys = 1000
    numcallcenterkeys = 200
    numfactonlinesalesrows = 5000000
    numinventoryfactrows = 300000
    gen_load_script = false
    Data Generated successfully !
    
    Using default parameters
    datadirectory = ./
    numfiles = 1
    seed = 2
    null = ' '
    timefile = Time.txt
    numfactsalesrows = 5000000
    numfactorderrows = 300000
    numprodkeys = 60000
    numstorekeys = 250
    numpromokeys = 1000
    numvendkeys = 50
    numcustkeys = 50000
    numempkeys = 10000
    numwarehousekeys = 100
    numshippingkeys = 100
    numonlinepagekeys = 1000
    numcallcenterkeys = 200
    numfactonlinesalesrows = 5000000
    numinventoryfactrows = 300000
    gen_load_script = false
    Data Generated successfully !
    
  6. 如果 vmart_gen 可执行文件工作不正常,请按如下内容所述重新编译它,然后再次运行示例数据生成器脚本。

    $ g++ vmart_gen.cpp -o vmart_gen
    $ chmod +x vmart_gen
    $ ./vmart_gen
    

6.2.2 - 步骤 2:创建示例数据库

要创建示例数据库,请按本节所述使用管理工具或管理控制台。

使用管理工具创建示例数据库

在此步骤中,您会使用管理工具创建一个示例数据库。要使用管理控制台,请转至下一节。

  1. 运行管理工具。

    $ /opt/vertica/bin/admintools
    

    或简单地输入 admintools

  2. 在管理工具的主菜单 (Main Menu) 中,单击配置菜单 (Configuration Menu),然后单击确定 (OK)

  3. 单击创建数据库 (Create Database),然后单击确定 (OK)

  4. 将数据库命名为 VMart,然后单击确定 (OK)

  5. 单击确定 (OK) 跳过密码,然后单击是 (Yes) 进行确认。

    在此教程中无需输入数据库管理员密码。但是,创建生产数据库时,请务必指定管理员密码。否则,该数据库将永久设置为信任身份验证(不存在密码)。

  6. 从您的 Vertica 群集中选择要包括的主机并单击确定 (OK)

    此示例将在单主机群集上创建数据库。Vertica 建议此群集中至少有三个主机。如果正在使用 Vertica 社区版,您最多只能使用三个节点。

  7. 单击确定 (OK) 选择数据目录和编录目录的默认路径。

    • 编录和数据路径只能包含字母数字字符,不能有前置空格字符。如果不能遵守这些限制条件,可能会导致数据库创建失败。

    • 创建生产数据库时,您可能要指定非默认位置。有关详细信息,请参阅《管理员指南》中的准备磁盘存储位置

  8. 由于本教程使用的是单主机群集,系统会显示 K-safety 警告。单击确定 (OK)

  9. 单击是 (Yes) 创建数据库。

    创建数据库期间,Vertica 会根据数据库名称及所选的主机的名称,自动创建一组节点定义,然后返回成功消息。

  10. 单击确定 (OK) 关闭数据库 VMart 已成功创建 (Database VMart created successfully) 消息。

使用管理控制台创建示例数据库

在此过程中,您将使用管理控制台创建示例数据库。要使用管理工具,请执行上一节中的步骤。

  1. 连接至管理控制台并登录。

  2. 在主页上,单击基础架构 (Infrastructure) 进入“数据库和群集 (Databases and Clusters)”页面。

  3. 单击选择相应的现有群集,然后单击创建数据库 (Create Database)

  4. 按照屏幕向导,该向导将提示您提供以下信息:

    • 数据库名称必须以字母开头,后跟由字母、数字或下划线组成的任何组合,且长度在 3 到 25 个字符之间。

    • (可选)要创建并连接到的数据库的数据库管理员密码。

    • 数据库群集中节点的 IP 地址;通常是管理主机的 IP 地址。

  5. 单击下一步 (Next)

6.2.3 - 步骤 3:连接到数据库

不论使用何种安装方法,您都要按照以下步骤连接至数据库。

  1. dbadmin 身份运行管理工具。

    $ /opt/vertica/bin/admintools

    或直接键入 admintools

  2. 如果已经位于管理工具中,请导航至“主菜单 (Main Menu)”页面。

  3. 选择连接到数据库 (Connect to Database) 并单击确定 (OK)

    要配置 VMart 数据库并为其加载数据,请完成以下步骤:

    如果使用快速安装方法安装了 VMart 数据库,则架构、表和数据都已定义。您可以选择删除现有数据库(请参阅本指南中的还原主机状态)并执行高级安装,或继续执行本指南中的查询数据

6.2.4 - 步骤 4:定义数据库架构

VMart 数据库安装时带有包含 SQL 命令的示例脚本,这些命令都比较典型,都是您可能会在实际业务中使用的查询。vmart_define_schema.sql 脚本会运行一个定义 VMart 架构和创建表的脚本。您必须在将数据加载到 VMart 数据库之前运行此脚本。

此脚本会执行以下任务:

  • 在 VMart 数据库架构中定义两个架构:online_sales 和 store。

  • 在这两个架构中定义表。

  • 在这些表上定义约束。

Vmart=> \i vmart_define_schema.sql
CREATE SCHEMA
CREATE SCHEMA
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
ALTER TABLE
CREATE TABLE
CREATE TABLE
ALTER TABLE
CREATE TABLE
ALTER TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
ALTER TABLE

6.2.5 - 步骤 5:加载数据

您已经创建了架构和表,现在可通过运行 vmart_load_data.sql 脚本将数据加载到表中。此脚本会将 opt/vertica/examples/VMart_Schema 中的 15 个 .tbl 文本文件加载到 vmart_design_schema.sql 创建的表中。

在采用典型硬件配置的群集中,加载这些数据可能需要几分钟时间。检查加载状态。为此,请按照《管理员指南》中的监控日志文件中所述监控 vertica.log 文件。

VMart=> \i vmart_load_data.sql
Rows Loaded
-------------
1826
(1 row)
Rows Loaded
-------------
60000
(1 row)
Rows Loaded
-------------
250
(1 row)
Rows Loaded
-------------
1000
(1 row)
Rows Loaded
-------------
50
(1 row)
Rows Loaded
-------------
50000
(1 row)
Rows Loaded
-------------
10000
(1 row)
Rows Loaded
-------------
100
(1 row)
Rows Loaded
-------------
100
(1 row)
Rows Loaded
-------------
1000
(1 row)
Rows Loaded
-------------
200
(1 row)
Rows Loaded
-------------
5000000
(1 row)
Rows Loaded
-------------
300000
(1 row)
VMart=>

7 - 查询数据

VMart 数据库安装时带有包含 SQL 命令的示例脚本,这些命令代表可能在真实交易中使用的查询。使用基本 SQL 命令查询数据库,或尝试执行以下命令。一但您顺利运行示例查询,则可能希望编写自己的查询。

键入以下 SQL 命令,返回 Dairy 类别中脂肪含量最低的五个产品的值。该命令会在 public 架构的 product_dimension 表中选择 Dairy 类别产品的脂肪含量,按由低到高的顺序对它们进行排序,然后将输出限制为前五个(前五个脂肪含量最低的产品)。

VMart => SELECT fat_content
         FROM ( SELECT DISTINCT fat_content
                FROM product_dimension
                WHERE department_description
                IN ('Dairy') ) AS food
         ORDER BY fat_content
         LIMIT 5;

您的结果应类似于以下内容:

 fat_content
-------------
80
81
82
83
84
(5 rows)

上一个示例来自 vmart_query_01.sql 文件。您可以使用随 VMart 数据库安装的脚本执行更多示例查询,或编写自己的脚本。有关 Vertica 附带的示例脚本列表,请参阅附录:VMart 示例数据库架构、表和脚本

8 - 备份和还原数据库

Vertica 提供了一个功能全面的实用程序 vbr,它可以备份和还原完整备份以及为特定架构或表创建备份。您应当定期备份数据库,在进行重大或破坏性操作之前也应当进行备份。

所有 vbr 操作都依赖于描述数据库、备份位置和其他参数的配置文件。通常,您对备份和还原操作使用相同的配置文件。要创建第一个配置文件,请复制 示例 vbr 配置文件 中列出的备份示例文件之一。编辑副本以指定快照(备份)名称、数据库详细信息以及备份位置。示例文件中的注释为您提供指导。

以下示例显示完整备份:

$ vbr -t backup --config full-backup.ini
Starting backup of database VTDB.
Participating nodes: v_vmart_node0001, v_vmart_node0002, v_vmart_node0003, v_vmart_node0004.
Snapshotting database.
Snapshot complete.
Approximate bytes to copy: 2315056043 of 2356089422 total.
[==================================================] 100%
Copying backup metadata.
Finalizing backup.
Backup complete!

默认情况下,屏幕上除了进度条外不会输出任何内容。

您可以还原整个数据库或选定的架构和表。您还可以使用 vbr 将数据从一个数据库复制到另一个数据库或复制整个群集。有关 vbr 的详细信息,请参阅备份和还原数据库

9 - 使用 Database Designer 创建完整的设计

Vertica Database Designer:

  • 分析您的逻辑架构,示例数据并可选择分析您的示例查询。

  • 创建可自动或手动部署的物理架构设计(一组投影)。

  • 不需要专门的数据库知识。

  • 可以随时运行和重复运行,以便实现进一步优化,而且无需停止数据库。

  • 使用策略提供最佳查询性能和数据压缩。

使用 Database Designer 创建全面设计,供您为数据库中的所有表创建新投影。

您也可使用 Database Designer 创建增量设计,从而为您提供的查询中引用的所有表创建投影。

您可以在管理控制台或管理工具中使用 Database Designer 创建全面设计。您还可以选择以编程方式运行 Database Designer。

9.1 - 使用管理控制台运行 Database Designer

在此教程中,您将通过管理控制台界面使用 Database Designer 创建一个综合性的设计。如果将来要优化查询,可以创建一个具有更多投影的增强(增量)设计。您可以针对自己提供的查询特别优化这些投影。

您可以选择手动或使用管理控制台向导来创建该设计,如下所述。

请按照以下步骤使用管理控制台向导来创建综合性的设计:

  1. 登录管理控制台。

  2. 确认数据库已启动且正在运行。

  3. 选择要为其创建设计的数据库。您可以在最近使用的数据库 (Recent Databases) 部分中查找数据库,或单击现有基础架构 (Existing Infrastructure) 访问“数据库和群集 (Databases and Clusters)”页面。

    此时会打开数据库概览页面。

  4. 在屏幕底部,单击设计 (Design) 按钮。

  5. 新建设计 (New Design) 对话框中,输入设计名称。

  6. 单击向导 (Wizard) 继续。

  7. 创建初始设计。对于设计类型 (Design Type),请选择全面 (Comprehensive),然后单击下一步 (Next)

  8. 优化目标 (Optimization Objective) 窗口中,选择平衡加载和性能 (Balance Load and Performance),以创建一个在数据库大小和查询性能之间取得平衡的设计。单击下一步 (Next)

  9. 选择架构。由于 VMart 设计是一种多架构数据库,请在选择示例数据 (Select Sample Data) 窗口中为您的设计选择所有三种架构(public、store 和 online_sales)。单击下一步 (Next)

    如果加入的架构的表中不含数据,设计可能达不到最优。您可以选择继续,但 Vertica 建议您取消选择含有空表的架构,然后再继续。

  10. 为您的设计选择 K-safety 值。K-Safety 值决定了您希望 Database Designer 创建的伙伴实例投影的数量。

  11. 选择“分析关联模式 (Analyze Correlations Mode)”。分析关联模式可确定 Database Designer 是否会在创建设计时分析并考虑列相关性。

    • 忽略 (Ignore): 创建设计时,请忽略指定表中的任何列关联。

    • 考虑使用现有关联 (Consider existing): 创建设计时考虑表中的现有相关。如果将模式设为 1,但不存在现有关联,Database Designer 将不考虑使用关联。

    • 分析缺少的关联 (Analyze missing): 分析之前没有进行相关分析的表中的列相关。创建设计时,考虑所有列相关(包括现有相关和新的相关)。

    • 全部分析 (Analyze all): 分析表中所有列相关并在创建设计时加以考虑。即使表中存在相关,仍需重新分析该表中的相关。

    单击下一步 (Next)

  12. 采用以下两种方式之一,将查询文件提交到 Database Designer:

    • 通过选择浏览 (Browse) 按钮提供您自己的查询文件。

    • 单击使用查询存储库 (Use Query Repository),这时会提交来自 QUERY_REQUESTS 系统表的最近执行的查询。

    单击下一步 (Next)

  13. 执行选项 (Execution Options) 窗口中,选择以下任一选项:

    • 分析统计信息 (Analyze statistics):选择此选项可在设计部署后自动运行统计信息,以便 Database Designer 可以对其提议的设计制定更好的决策。

    • 自动构建 (Auto-build):选择此选项可在完成向导后立即运行 Database Designer。此选项仅会构建拟建的设计。

    • 自动部署 (Auto-deploy):选择此选项可自动构建要自动部署的设计。

  14. 单击提交设计 (Submit Design)。此时会打开 Database Designer 页面:

    • 如果选择自动部署设计,Database Designer 会在后台执行。

    • 如果未选择自动构建 (Auto-build)自动部署 (Auto-deploy) 选项,您可以单击 Database Designer 页面上的构建设计 (Build Design)部署设计 (Deploy Design)

  15. 我的设计 (My Designs) 窗格中,查看设计状态:

    • 部署完成后,我的设计 (My Designs) 窗格会显示设计已部署 (Design Deployed)

    • 事件历史记录窗口会显示设计构建和部署的详细信息。

要使用管理工具运行 Database Designer,请参阅本指南中的使用管理工具运行 Database Designer

9.2 - 使用管理工具运行 Database Designer

在此步骤中,您会在管理工具界面中使用 Database Designer 创建一个全面设计。将来,如果您有要优化的查询,可以创建一个具有更多投影的增强(增量)设计。您可以针对自己提供的查询特别优化这些投影。有关详细信息,请参阅增量设计

按照以下步骤操作,通过在管理工具中使用 Database Designer 创建全面设计:

  1. 如果不在管理工具中,请退出 vsql 会话并访问管理工具:

    • 键入 \q 退出 vsql。

    • 键入 admintools 访问管理工具主菜单。

  2. 启动要为其创建设计的数据库。

  3. 主菜单 (Main Menu) 中,单击配置菜单 (Configuration Menu),然后单击确定 (OK)

  4. 配置菜单 (Configuration Menu) 中,单击运行 Database Designer (Run Database Designer),然后单击确定 (OK)

  5. 选择要设计的数据库 (Select a database for design) 对话框打开时,选择 VMart,然后单击确定 (OK)

    如果系统提示您输入数据库密码,请单击确定 (OK) 跳过该消息。由于安装 VMart 数据库时并未分配任何密码,您无需在此时输入密码。

  6. 单击确定 (OK) 接受用来存储 Database Designer 输出和日志文件的默认目录。

  7. Database Designer 窗口中,输入设计名称(例如 vmart_design),然后单击确定 (OK)。设计名称可以只包含数字字母字符或下划线。不允许使用其他特殊字符。

  8. 创建全面的初始设计。在设计类型 (Design Type) 窗口中,单击全面 (Comprehensive),然后单击确定 (OK)

  9. 选择架构。由于 VMart 设计是一个多架构数据库,您可以为您的设计选择所有三种架构(online_sales、public 和 store)。单击确定 (OK)

    如果您包括了一个架构,而该架构包含没有数据的表,那么管理工具会通知您设计没有数据的表可能不够理想。您可以选择继续,但 Vertica 建议您取消选择含有空表的架构,然后再继续。

  10. 设计选项 (Design Options) 窗口中,接受所有三个选项,然后单击确定 (OK)

    三个选项是:

    • 使用查询进行优化 (Optimize with queries): 如果您想优化数据库设计以提升查询性能,那么向 Database Designer 提供查询就尤为重要。Vertica 建议您将设计输入限制为 100 个查询。
    • 更新统计信息 (Update statistics): 准确的统计信息有助于 Database Designer 选择最佳的数据压缩策略。如果您选择此选项,则会更新数据库统计信息以最大限度提高设计质量。
    • 部署设计 (Deploy design): 新设计会自动部署。部署期间,系统会添加新投影,保留部分现有投影,并根据需要移除现有投影。所有新投影都会刷新,以填充数据。
  11. 由于您选择了使用查询优化 (Optimize with queries) 选项,您必须输入要在数据库中运行的查询所在的文件的完整路径。在本例中,该路径为:

    /opt/vertica/examples/VMart_Schema/vmart_queries.sql
    

    查询文件中的查询必须使用分号 (;) 分隔。最后一个查询必须以分号 (;) 结尾。

  12. 选择所需的 K-safety 值,然后单击确定 (OK)。设计 K-Safety 决定了您希望 Database Designer 创建的伙伴实例投影的数量。

    如果在单个节点上创建全面设计,系统不会提示您输入 K-safety 值。

  13. 优化目标 (Optimization Objective) 窗口中,选择平衡查询/加载性能 (Balanced query/load performance),以创建一个在数据库大小和查询性能之间取得平衡的设计。单击确定 (OK)

  14. 显示提供信息的消息时,单击继续 (Proceed)

    Database Designer 自动执行以下操作:

    • 设置设计会话。

    • 检查表数据。

    • 从提供的查询文件加载查询(在本例中为 /opt/vertica/examples/VMart_Schema/vmart_queries.sql)。

    • 创建设计。

    根据在“设计选项 (Desgin Options)”窗口中选择的内容,部署设计或保存含有设计创建命令的 SQL 文件。

    根据系统的资源情况,设计流程会持续几分钟的时间。您不得中断此流程,而是允许其正常完成。如果必须取消会话,请按 Ctrl+C。

  15. Database Designer 完成时,请按 Enter 返回管理工具菜单。检查为创建设计所采取的步骤。这些文件位于指定用来存储输出和日志文件的目录中。在本例中,该目录为 /opt/vertica/examples/VMart_Schema。有关脚本文件的详细信息,请参阅关于 Database Designer

有关管理设计的其他信息,请参阅《管理员指南》中的创建数据库设计

10 - 还原主机状态

完成教程后,您可以将主机还原至原始状态。根据以下说明清理主机并重新启动。

停止并删除数据库

根据以下步骤停止和/或删除数据库。数据库必须先停止,然后才可将其删除。

  1. 如果连接到数据库,通过键入 \q 断开连接。

  2. 在管理工具的主菜单 (Main Menu) 对话框中,单击停止数据库 (Stop Database),然后单击确定 (OK)

  3. 选择要停止的数据库 (Select database to stop) 窗口中,选择要停止的数据库并单击确定 (OK)

  4. 停止数据库后,单击配置菜单 (Configuration Menu),然后单击确定 (OK)

  5. 单击删除数据库 (Drop Database),然后单击确定 (OK)

  6. 选择要删除的数据库 (Select database to drop) 窗口中,选择要删除的数据库并单击确定 (OK)

  7. 单击是 (Yes) 确认。

  8. 在下一个窗口中键入 yes(小写)进行确认,然后单击确定 (OK)

您也可使用 delete_example 脚本停止并删除数据库:

  1. 如果连接到数据库,通过键入 \q 断开连接。

  2. 在管理工具的主菜单 (Main Menu) 对话框中,选择退出 (Exit)

  3. 以数据库管理员的身份登录。

  4. 切换到 /examples 目录。

    $ cd /opt/vertica/examples
    
  5. 运行 delete_example 脚本。

    $ /opt/vertica/sbin/delete_example Vmart
    

卸载 Vertica

请参阅卸载 Vertica

可选步骤

您也可选择:

  • 在所有群集主机上删除 dbadmin 帐户。

  • 删除您创建的任何示例数据库目录。

11 - 附录:VMart 示例数据库架构、表和脚本

本附录详细介绍了 VMart 示例数据库的架构、表和脚本。

VMart 示例数据库含有三种不同的架构:

  • public

  • store

  • online_sales

“架构”一词在 Vertica 中具有若干相互关联的含义:

  • 在 SQL 语句中,架构是指某个逻辑架构的命名空间。

  • 逻辑架构是指一组表和约束。

  • 物理架构是指一组投影。

标识 VMart 数据库中的三个架构和所有数据表。每个架构都含有在数据库安装期间创建和加载的表。有关表列表及其内容,请参阅架构映射:

示例脚本 描述了包含 SQL 命令的示例脚本,这些命令表示可能在使用类似 VMart 的数据库的实际业务中使用的查询。一但您顺利运行示例查询,则可能希望编写自己的查询。

11.1 - 表

VMart 数据库中的三个架构包括以下表:

11.2 - public 架构映射

public 架构是一种雪花型架构。下图说明了 public 架构及其与 online_sales store 架构中表的关系。

后续小节描述了数据库表。

11.2.1 - inventory_fact

此表含有每个库存产品的信息。

11.2.2 - customer_dimension

此表含有所有零售连锁店客户的信息。

11.2.3 - date_dimension

此表含有日期信息。它根据含有正确日期/时间数据的文件生成。

11.2.4 - employee_dimension

此表含有零售连锁店的所有雇员的信息。

11.2.5 - product_dimension

此表介绍了百货连锁店销售的所有产品的信息。

11.2.6 - promotion_dimension

此表介绍了零售连锁店过去开展的每次促销的信息。

11.2.7 - shipping_dimension

此表含有零售连锁店使用的货运公司的信息。

11.2.8 - vendor_dimension

此表含有通过零售连锁店销售产品的每个供应商的信息。

11.2.9 - warehouse_dimension

此表含有每个连锁店仓库的信息。

11.3 - Store 架构映射

store 架构是一种雪花型架构,含有零售连锁店旗下实体店的信息。下图演示了 store 架构及其与 public 架构中表的关系。

后续小节描述了数据库表。

11.3.1 - store_orders_fact

此表含有公司实体店的所有订单信息。

11.3.2 - store_sales_fact

此表含有公司实体店的所有销售信息。

11.3.3 - store_dimension

此表含有零售连锁店中每个实体店的信息。

11.4 - online_sales 架构映射

online_sales 架构是一种雪花型架构,含有零售连锁店的信息。下图演示了 online_sales 架构及其与 public 架构中表的关系。

后续小节描述了数据库表。

11.4.1 - online_sales_fact

此表介绍了通过网店购买的所有商品。

11.4.2 - call_center_dimension

此表介绍了所有连锁店的呼叫中心。

11.4.3 - online_page_dimension

此表介绍了网店中的所有页面。

11.5 - 示例脚本

您可以创建自己的查询,但 VMart 示例目录含有示例查询脚本文件,可用来帮助您快速入门。

您可以在 /opt/vertica/examples/VMart_Schema 路径找到以下示例脚本。

要运行任何脚本,请输入

=>  \i <script_name>

或者,在脚本文件中手动键入命令。

11.5.1 - vmart_query_01.sql

-- vmart_query_01.sql
-- FROM clause subquery
-- Return the values for five products with the
-- lowest-fat content in the Dairy department
SELECT fat_content
FROM (
  SELECT DISTINCT fat_content
  FROM product_dimension
  WHERE department_description
  IN ('Dairy') ) AS food
  ORDER BY fat_content
  LIMIT 5;

输出

 fat_content
-------------
          80
          81
          82
          83
          84
(5 rows)

11.5.2 - vmart_query_02.sql

-- vmart_query_02.sql
-- WHERE clause subquery
-- Asks for all orders placed by stores located in Massachusetts
-- and by vendors located elsewhere before March 1, 2003:
SELECT order_number, date_ordered
FROM store.store_orders_fact orders
WHERE orders.store_key IN (
  SELECT store_key
  FROM store.store_dimension
  WHERE store_state = 'MA')
    AND orders.vendor_key NOT IN (
  SELECT vendor_key
  FROM public.vendor_dimension
  WHERE vendor_state = 'MA')
    AND date_ordered < '2012-03-01';

输出

order_number | date_ordered
-------------+--------------
       53019 | 2012-02-10
      222168 | 2012-02-05
      160801 | 2012-01-08
      106922 | 2012-02-07
      246465 | 2012-02-10
      234218 | 2012-02-03
      263119 | 2012-01-04
       73015 | 2012-01-01
      233618 | 2012-02-10
       85784 | 2012-02-07
      146607 | 2012-02-07
      296193 | 2012-02-05
       55052 | 2012-01-05
      144574 | 2012-01-05
      117412 | 2012-02-08
      276288 | 2012-02-08
      185103 | 2012-01-03
      282274 | 2012-01-01
      245300 | 2012-02-06
      143526 | 2012-01-04
       59564 | 2012-02-06
...

11.5.3 - vmart_query_03.sql

-- vmart_query_03.sql
-- noncorrelated subquery
-- Requests female and male customers with the maximum
-- annual income from customers
SELECT customer_name, annual_income
FROM public.customer_dimension
WHERE (customer_gender, annual_income) IN (
  SELECT customer_gender, MAX(annual_income)
  FROM public.customer_dimension
  GROUP BY customer_gender);

输出

  customer_name   | annual_income
------------------+---------------
 James M. McNulty |        999979
 Emily G. Vogel   |        999998
(2 rows)

11.5.4 - vmart_query_04.sql

-- vmart_query_04.sql
-- IN predicate
-- Find all products supplied by stores in MA
SELECT DISTINCT s.product_key, p.product_description
FROM store.store_sales_fact s, public.product_dimension p
WHERE s.product_key = p.product_key
AND s.product_version = p.product_version AND s.store_key IN (
  SELECT store_key
  FROM store.store_dimension
  WHERE store_state = 'MA')
ORDER BY s.product_key;

输出

 product_key |          product_description
-------------+----------------------------------------
1 | Brand #1 butter
1 | Brand #2 bagels
2 | Brand #3 lamb
2 | Brand #4 brandy
2 | Brand #5 golf clubs
2 | Brand #6 chicken noodle soup
3 | Brand #10 ground beef
3 | Brand #11 vanilla ice cream
3 | Brand #7 canned chicken broth
3 | Brand #8 halibut
3 | Brand #9 camera case
4 | Brand #12 rash ointment
4 | Brand #13 low fat milk
4 | Brand #14 chocolate chip cookies
4 | Brand #15 silver polishing cream
5 | Brand #16 cod
5 | Brand #17 band aids
6 | Brand #18 bananas
6 | Brand #19 starch
6 | Brand #20 vegetable soup
6 | Brand #21 bourbon
...

11.5.5 - vmart_query_05.sql

-- vmart_query_05.sql
-- EXISTS predicate
-- Get a list of all the orders placed by all stores on
-- January 2, 2003 for the vendors with records in the
-- vendor_dimension table
SELECT store_key, order_number, date_ordered
FROM store.store_orders_fact
WHERE EXISTS (
   SELECT 1
   FROM public.vendor_dimension
   WHERE public.vendor_dimension.vendor_key = store.store_orders_fact.vendor_key)
   AND date_ordered = '2012-01-02';

输出

 store_key | order_number | date_ordered
-----------+--------------+--------------
        98 |       151837 | 2012-01-02
       123 |       238372 | 2012-01-02
       242 |       263973 | 2012-01-02
       150 |       226047 | 2012-01-02
       247 |       232273 | 2012-01-02
       203 |       171649 | 2012-01-02
       129 |        98723 | 2012-01-02
        80 |       265660 | 2012-01-02
       231 |       271085 | 2012-01-02
       149 |        12169 | 2012-01-02
       141 |       201153 | 2012-01-02
         1 |        23715 | 2012-01-02
       156 |        98182 | 2012-01-02
        44 |       229465 | 2012-01-02
       178 |       141869 | 2012-01-02
       134 |        44410 | 2012-01-02
       141 |       129839 | 2012-01-02
       205 |        54138 | 2012-01-02
       113 |        63358 | 2012-01-02
        99 |        50142 | 2012-01-02
        44 |       131255 | 2012-01-02
...

11.5.6 - vmart_query_06.sql

-- vmart_query_06.sql
-- EXISTS predicate
-- Orders placed by the vendor who got the best deal
-- on January 4, 2004
SELECT store_key, order_number, date_ordered
FROM store.store_orders_fact ord, public.vendor_dimension vd
WHERE ord.vendor_key = vd.vendor_key
AND vd.deal_size IN (
   SELECT MAX(deal_size)
   FROM public.vendor_dimension)
AND date_ordered = '2013-01-04';

输出

 store_key | order_number | date_ordered
-----------+--------------+--------------
        45 |       202416 | 2013-01-04
        24 |       250295 | 2013-01-04
       121 |       251417 | 2013-01-04
       198 |        75716 | 2013-01-04
       166 |        36008 | 2013-01-04
        27 |       150241 | 2013-01-04
       148 |       182207 | 2013-01-04
         9 |       188567 | 2013-01-04
       113 |        66017 | 2013-01-04
...

11.5.7 - vmart_query_07.sql

-- vmart_query_07.sql
-- Multicolumn subquery
-- Which products have the highest cost,
-- grouped by category and department
SELECT product_description, sku_number, department_description
FROM public.product_dimension
WHERE (category_description, department_description, product_cost) IN (
   SELECT category_description, department_description,
   MAX(product_cost) FROM product_dimension
   GROUP BY category_description, department_description);

输出

product_description        |      sku_number       |   department_description
---------------------------+-----------------------+---------------------------------
 Brand #601 steak           | SKU-#601             | Meat
 Brand #649 brooms          | SKU-#649             | Cleaning supplies
 Brand #677 veal            | SKU-#677             | Meat
 Brand #1371 memory card    | SKU-#1371            | Photography
 Brand #1761 catfish        | SKU-#1761            | Seafood
 Brand #1810 frozen pizza   | SKU-#1810            | Frozen Goods
 Brand #1979 canned peaches | SKU-#1979            | Canned Goods
 Brand #2097 apples         | SKU-#2097            | Produce
 Brand #2287 lens cap       | SKU-#2287            | Photography
...

11.5.8 - vmart_query_08.sql

-- vmart_query_08.sql
-- between online_sales_fact and online_page_dimension
SELECT page_description, page_type, start_date, end_date
FROM online_sales.online_sales_fact f, online_sales.online_page_dimension d
WHERE f.online_page_key = d.online_page_key
AND page_number IN
   (SELECT MAX(page_number)
     FROM online_sales.online_page_dimension)
AND page_type = 'monthly' AND start_date = '2012-06-02';

输出

      page_description     | page_type | start_date | end_date
---------------------------+-----------+------------+-----------
Online Page Description #1 | monthly   | 2012-06-02 | 2012-06-11
Online Page Description #1 | monthly   | 2012-06-02 | 2012-06-11
Online Page Description #1 | monthly   | 2012-06-02 | 2012-06-11
Online Page Description #1 | monthly   | 2012-06-02 | 2012-06-11
Online Page Description #1 | monthly   | 2012-06-02 | 2012-06-11
Online Page Description #1 | monthly   | 2012-06-02 | 2012-06-11
Online Page Description #1 | monthly   | 2012-06-02 | 2012-06-11
Online Page Description #1 | monthly   | 2012-06-02 | 2012-06-11
Online Page Description #1 | monthly   | 2012-06-02 | 2012-06-11
Online Page Description #1 | monthly   | 2012-06-02 | 2012-06-11
Online Page Description #1 | monthly   | 2012-06-02 | 2012-06-11
Online Page Description #1 | monthly   | 2012-06-02 | 2012-06-11
(12 rows)

11.5.9 - vmart_query_09.sql

-- vmart_query_09.sql
-- Equi join
-- Joins online_sales_fact table and the call_center_dimension
-- table with the ON clause
SELECT sales_quantity, sales_dollar_amount, transaction_type, cc_name
FROM online_sales.online_sales_fact
INNER JOIN online_sales.call_center_dimension
ON (online_sales.online_sales_fact.call_center_key
      = online_sales.call_center_dimension.call_center_key
     AND sale_date_key = 156)
ORDER BY sales_dollar_amount DESC;

输出

 sales_quantity | sales_dollar_amount | transaction_type |      cc_name
----------------+---------------------+------------------+-------------------
              7 |                 589 | purchase         | Central Midwest
              8 |                 589 | purchase         | South Midwest
              8 |                 589 | purchase         | California
              1 |                 587 | purchase         | New England
              1 |                 586 | purchase         | Other
              1 |                 584 | purchase         | New England
              4 |                 584 | purchase         | New England
              7 |                 581 | purchase         | Mid Atlantic
              5 |                 579 | purchase         | North Midwest
              8 |                 577 | purchase         | North Midwest
              4 |                 577 | purchase         | Central Midwest
              2 |                 575 | purchase         | Hawaii/Alaska
              4 |                 573 | purchase         | NY Metro
              4 |                 572 | purchase         | Central Midwest
              1 |                 570 | purchase         | Mid Atlantic
              9 |                 569 | purchase         | Southeastern
              1 |                 569 | purchase         | NY Metro
              5 |                 567 | purchase         | Other
              7 |                 567 | purchase         | Hawaii/Alaska
              9 |                 567 | purchase         | South Midwest
              1 |                 566 | purchase         | New England
...