五分钟快速上手
所有文档

          数据仓库 Palo

          五分钟快速上手

          在本教程文档中,我们将为大家介绍使用Palo UI快速体验和使用Palo查询的操作过程。

          阅读本教程前,请先参阅 创建集群 文档创建一个 PALO 集群。

          Palo UI是Palo为大家提供的可以快速执行查询请求和进行一些管理操作的Web UI环境。

          本文档中演示使用的demo数据和查询例句均来自于 Star Schema Benchmark,用户可以点击下载获取样例数据和SQL语句。

          进入Palo UI

          在Palo的集群详情页面中,提供了Palo UI的快捷入口。

          1.png

          点击Palo UI按钮,进入Web UI环境。在登陆页面输入用户名和密码,用户名是“admin”,密码是用户创建集群时填写的密码。

          2.png

          点击登陆之后,就可以进入到Palo UI的主页面,默认页面就是Palo查询页面(Playground)。

          3.png

          Palo快速查询页面主要分成三个区域,左侧为表管理区域,包括系统库表和用户自己创建的表。右上区域是SQL执行区域,右下区域为表预览和数据导入以及执行结果区域。 接下来我们在本页面展示从建库、建表、导入数据、查询等主要步骤,帮助初次使用Palo的用户体验一次完整的使用流程。

          建库建表

          在编辑器区域,我们输入SQL语句创建一个example_db的库。点击执行之后,在下方可以看到执行结果,执行成功之后,刷新左侧表区域,就可以在表管理区域看到新创建的example_db库了。

          CREATE DATABASE example_db;

          4.png

          我们的demo数据一共有5份销售相关的订单、日期、客户信息等数据样例,所以我们需要创建5张对应的表。

          首先我们在example_db库中创建一个名为lineorder的表。Palo使用DISTRIBUTED关键字设置分桶列,分桶列用于对数据进行水平划分,一般我们选择一个可以帮助数据能够均匀划分的列作为分桶列。此处我们使用lo_orderkey作为分桶列。此处我们还设置了一个副本数为1,因为Palo默认三副本,如果我们集群只购买了一个 Compute Node,则需要手动设置副本数为1。

          这个表主要定义了订单号、订单时间以及利润、税收等一些订单主信息。

          CREATE TABLE lineorder (
              lo_orderkey BIGINT,
              lo_linenumber BIGINT,
              lo_custkey INT,
              lo_partkey INT,
              lo_suppkey INT,
              lo_orderdate INT,
              lo_orderpriotity VARCHAR(16),
              lo_shippriotity INT,
              lo_quantity BIGINT,
              lo_extendedprice BIGINT,
              lo_ordtotalprice BIGINT,
              lo_discount BIGINT,
              lo_revenue BIGINT,
              lo_supplycost BIGINT,
              lo_tax BIGINT,
              lo_commitdate BIGINT,
              lo_shipmode VARCHAR(11)
          )
          DISTRIBUTED BY HASH(lo_orderkey)
          PROPERTIES ("replication_num"="1");

          5.png

          然后我们再创建一个date表。使用d_datekey作为分桶列,并设置副本数为1。这个表定义的是更加详细一些的订单日期信息。

          CREATE TABLE date (
              d_datekey INT,
              d_date VARCHAR(20),
              d_dayofweek VARCHAR(10),
              d_month VARCHAR(11),
              d_year INT,
              d_yearmonthnum INT,
              d_yearmonth VARCHAR(9),
              d_daynuminweek INT,
              d_daynuminmonth INT,
              d_daynuminyear INT,
              d_monthnuminyear INT,
              d_weeknuminyear INT,
              d_sellingseason VARCHAR(14),
              d_lastdayinweekfl INT,
              d_lastdayinmonthfl INT,
              d_holidayfl INT,
              d_weekdayfl INT
          ) DISTRIBUTED BY hash(d_datekey) PROPERTIES ( 
            "storage_type"="column", 
            "replication_num"="1");

          6.png

          接下来我们再分别创建剩下三张表,customerpartsupplier,分别记录了客户、商品和供应商的详细信息。

          CREATE TABLE customer (
              c_custkey INT,
              c_name VARCHAR(26),
              c_address VARCHAR(41),
              c_city VARCHAR(11),
              c_nation VARCHAR(16),
              c_region VARCHAR(13),
              c_phone VARCHAR(16),
              c_mktsegment VARCHAR(11) )
          DISTRIBUTED BY hash(c_custkey) 
          PROPERTIES ( 
            "storage_type"="column", 
            "replication_num"="1");
           
          CREATE TABLE part (
              p_partkey INT,
              p_name VARCHAR(23),
              p_mfgr VARCHAR(7),
              p_category VARCHAR(8),
              p_brand VARCHAR(10),
              p_color VARCHAR(12),
              p_type VARCHAR(26),
              p_size INT,
              p_container VARCHAR(11) )
          DISTRIBUTED BY hash(p_partkey) 
          PROPERTIES ( 
            "storage_type"="column", 
            "replication_num"="1");
           
          CREATE TABLE supplier (
              s_suppkey INT,
              s_name VARCHAR(26),
              s_address VARCHAR(26),
              s_city VARCHAR(11),
              s_nation VARCHAR(16),
              s_region VARCHAR(13),
              s_phone VARCHAR(16) )
          DISTRIBUTED BY hash(s_suppkey) 
          PROPERTIES ( 
            "storage_type"="column", 
            "replication_num"="1");

          表建完之后,可以查看 example_db 中表的信息:

          7.png

          导入数据

          Palo 支持多种数据导入方式。具体可以参阅数据导入文档。这里我们使用Web方式便捷导入数据做示例。

          首先点击选中需要导入数据的表

          8.png

          然后点击数据导入,进入数据导入页面

          9.png

          点击“下一步”。之后先选择导入文件的列分割符,这里我们是 \t 分割。接着选择需要导入的数据文件

          10.png

          等待文件上传完成,点击选择下方已上传的文件。这时也会看到该文件按照指定分隔符分割后的预览数据(前10行)。

          11.png 12.png

          点击“下一步”进入到数据导入配置页面,我们以“lineorder_data”为label,然后点击“导入”按钮。

          13.png

          等待片刻,可以看到数据导入的结果。其中 Status 的状态为 Success,即表示导入成功。点击OK之后,数据导入完成。

          14.png

          由于Web UI支持导入的数据大小有限,因此我们将完整的lineorder数据切分成了六份,此处我们仅导入一份数据作为演示,我们在demo文件中放置了完整数据样本,用户可以根据测试需求进行追加导入全部数据。

          我们以同样的方式导入表datecustomerpartsupplier对应的数据。

          15.png

          数据查询

          简单查询

          数据导入完成之后,我们可以执行一些查询语句来查看数据的状态。

          可以预览表的一部分数据。

          SELECT * FROM  lineorder limit 10

          16.png

          或者统计查询表的记录数量。

          SELECT COUNT(*) FROM lineorder

          image.png

          分析查询

          然后可以按照我们的分析需求,执行查询操作,获取查询结果。

          SELECT SUM(LO_EXTENDEDPRICE*LO_DISCOUNT) AS
          REVENUE
          FROM  lineorder, date
          WHERE  LO_ORDERDATE = D_DATEKEY
          AND D_YEAR = 1993
          AND LO_DISCOUNT BETWEEN 1 AND 3
          AND LO_QUANTITY < 25;

          通过Web UI,我们在页面执行SQL,并且快速获取查询结果。

          17.png

          也可以执行多表的复杂查询

          SELECT C_CITY, S_CITY, D_YEAR, SUM(LO_REVENUE)
          AS  REVENUE
          FROM customer, lineorder, supplier, date
          WHERE  LO_CUSTKEY = C_CUSTKEY
          AND LO_SUPPKEY = S_SUPPKEY
          AND  LO_ORDERDATE = D_DATEKEY
          AND C_NATION = 'UNITED STATES'
          AND S_NATION = 'UNITED STATES'
          AND D_YEAR >= 1992 AND D_YEAR <= 1997
          GROUP BY C_CITY, S_CITY, D_YEAR
          ORDER BY D_YEAR ASC,  REVENUE DESC;

          页面查询的执行时间以及结果:

          image.png

          执行时间为 SQL 在服务器端实际执行耗时。因为 UI 界面经过多层代理,所以用户感知的查询延迟略慢于实际SQL的执行时间。

           至此,我们通过 UI 界面完成了一个完整的建库、建表、导入数据和查询流程。更多操作,请参阅开始使用部分文档。

          上一篇
          创建集群
          下一篇
          开始使用