vertica-CUSTOM DESIGNER、 PROJECTION、procedure、空間對象

一 .創建具有指定名稱的設計
參考:https://www.vertica.com/docs/9.1.x/HTML/index.htm#Authoring/AdministratorsGuide/DBDAPI/CategoriesOfDatabaseDesignerFunctions.htm
https://www.vertica.com/docs/9.1.x/HTML/index.htm#Authoring/SQLReferenceManual/Functions/VerticaFunctions/DatabaseDesigner/DESIGNER_CREATE_DESIGN.htm
 

-- create DESIGNER

=> SELECT DESIGNER_CREATE_DESIGN('VMART_DESIGN');


--Set design properties

=>DESIGNER_SET_DESIGN_TYPE ( 'VMART_DESIGN', 'INCREMENTAL' )


-- add TABLES

 => SELECT DESIGNER_ADD_DESIGN_TABLES('VMART_DESIGN','online_sales.*');


-- add QUERIES  

 => SELECT DESIGNER_ADD_DESIGN_QUERIES('VMART_DESIGN', '/tmp/examples/vmart_queries.sql','true');
 

輸出:

  DESIGNER_ADD_DESIGN_QUERIES
-----------------------------
Number of accepted queries                      =9
Number of queries referencing non-design tables =0
Number of unsupported queries                   =0
Number of illegal queries                       =0
=> \x
Expanded display is on.
=> SELECT * FROM V_MONITOR.DESIGN.QUERIES
-[ RECORD 1 ]------------+-------------------
design_id                | 45035996273705090
design_name              | vmart_design
design_query_id          | 1
design_query_id_index    | 0
query_text               | SELECT fat_content
FROM (
SELECT DISTINCT fat_content
  FROM product_dimension
  WHERE department_description
  IN ('Dairy') ) AS food
  ORDER BY fat_content
  LIMIT 5;
weight                   | 1
design_query_search_path | v_dbd_vmart_design_vmart_design_ltt, "$user", public, v_catalog, v_monitor, v_internal
design_query_signature   | 45035996273724651

-[ RECORD 2]-------------+-------------------
design_query_id          | 2
design_query_id_index    | 0
query_text               | 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';
         
weight                   | 1
design_query_search_path | v_dbd_vmart_design_vmart_design_ltt, "$user", public, v_catalog, v_monitor, v_internal
design_query_signature   | 45035996273724508   

 

二 . 自定義projection

參考:https://www.vertica.com/docs/9.1.x/HTML/index.htm#Authoring/AdministratorsGuide/Projections/WorkingWithProjections.htm%3FTocPath%3DAdministrator's%2520Guide%7CWorking%2520with%25C2%25A0Projections%7C_____0

https://blog.csdn.net/hmxz2nn/article/details/90312731

1.創建PROJECTION

CREATE PROJECTION IF NOT EXISTS public.book_projection1 (
     book_id ENCODING RLE ACCESSRANK 1500,
     GROUPED(book_name ENCODING RLE, book_price)
     book_type,
     recordtime)
AS SELECT 
     book_id, 
     book_name, 
     book_price, 
     book_type,
     recordtime
FROM public.book
ORDER BY book_id
SEGMENTED BY HASH(book_id) UNSEGMENTED ALL NODES KSAFE 1;


刷新

全量刷新:viid=>SELECT START_REFRESH();
指定刷新:viid=> select refresh('public.book');


查看刷新進度:

SELECT *FROM PROJECTION_REFRESHES WHERE projection_name='book_projection1'

-- 查看某表所有的projection信息

viid=> SELECT GET_PROJECTIONS('public.book');

刪除:

DROP PROJECTION public.book_projection1;

複製 table and projection

CREATE TABLE private.book LIKE public.book INCLUDING PROJECTIONS;

 

ACCESSRANK 參數解析:

用於優先考慮列訪問速度
如果您測量並設置羣集中存儲位置的性能,Vertica將使用此信息來確定列的存儲位置。有關更多信息,請參閱設置存儲性能。

列如何排名
Vertica將投影排序順序中包含的列存儲在最快的可用存儲位置上。投影排序順序中未包括的列存儲在較慢的磁盤上。每個投影的列排名如下:

排序順序中的列具有最高優先級(數字> 1000)。
排序順序的最後一列被賦予排名編號1001。
排序順序中的倒數第二列被賦予排名號1002,依此類推,直到排序順序中的第一列被賦予1000 +#排序列。
其餘列的編號從1000-1開始,從1000開始,每列遞減1。
然後,Vertica會將磁盤上從最高到最低的列存儲在磁盤上。它將排名最高的列放在最快的磁盤上,而排名最低的列放在最慢的磁盤上。

覆蓋默認列排名
您可以通過手動覆蓋這些列的默認等級來修改存儲在快速磁盤上的列。爲此,請ACCESSRANK在列列表中設置關鍵字。確保使用尚未用於另一列的整數。例如,如果要爲列賦予最快的訪問等級,請使用明顯高於1000 +排序列數的數字。這樣,您可以隨時間輸入更多列,而不會影響您設置的訪問級別。
The following example sets column store_key's access rank to 1500:

CREATE PROJECTION retail_sales_fact_p (
     store_key ENCODING RLE ACCESSRANK 1500,
     pos_transaction_number ENCODING RLE,
     sales_dollar_amount,
     cost_dollar_amount )
AS SELECT 
     store_key, 
     pos_transaction_number, 
     sales_dollar_amount, 
     cost_dollar_amount
FROM store.store_sales_fact
ORDER BY store_key
SEGMENTED BY HASH(pos_transaction_number) ALL NODES;

--------------------------------------------------------------------------------------------------------------------------------------

三 . 自定義存儲過程

1.Create the file:

#!/bin/bash
echo "hello planet argument: $1" >> /tmp/myprocedure.log 

2. 安裝

$ /opt/vertica/bin/adminTools
$ admintools -t install_procedure -d vmartdb -f /scratch/helloworld.sh -p ownerpassword
Installing external procedure...
External procedure installed

3.Create the procedure with the following SQL:

=> CREATE PROCEDURE helloplanet(arg1 varchar) AS 'helloplanet.sh' LANGUAGE 'external' USER 'dbadmin';

4. grant

=> GRANT EXECUTE ON PROCEDURE tokenize(varchar) TO Bob, Jules, Operator; 

5. revoke

=> REVOKE EXECUTE ON PROCEDURE tokenize(varchar) FROM Bob;

6.drop

=> DROP PROCEDURE helloplanet(arg1 varchar);

 

四 . 地理空間對象

參考:https://www.vertica.com/docs/9.1.x/HTML/index.htm#Authoring/AnalyzingData/Geospatial/GeospatialAnalytics/GeospatialAnalytics.htm%3FTocPath%3DAnalyzing%2520Data%7CGeospatial%2520Analytics%7C_____0

思路: 先創建測試表,再插入數據確定列具體長度,最後創建用於生產環境的表

CREATE TABLE [[db-name.]schema.]table-name (
   column-name GEOMETRY[(length)],
   column-name GEOGRAPHY[(length)]);


STV_MemSize
以INTEGER形式返回空間對象的長度(以字節爲單位)。

使用此功能可以確定空間數據的最佳列寬。
例子:

=> CREATE TABLE mem_size_table (id int, geom geometry(800));


CREATE TABLE

=> COPY mem_size_table (id, gx filler LONG VARCHAR, geom as ST_GeomFromText(gx)) FROM STDIN DELIMITER '|';


Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>>1|POINT(3 5)
>>2|MULTILINESTRING((1 5, 2 4, 5 3, 6 6),(3 5, 3 7))
>>3|MULTIPOLYGON(((2 6, 2 9, 6 9, 7 7, 4 6, 2 6)),((0 0, 0 5, 1 0, 0 0)),((0 2, 2 5, 4 5, 0 2)))
>>\.

=> SELECT max(STV_MemSize(geom)) FROM mem_size_table;


 max
-----
 336
(1 row)

 

CREATE TABLE

=> CREATE TABLE production_table(id int, geom geometry(336));

 

=> INSERT INTO production_table SELECT * FROM mem_size_table;

 OUTPUT
--------
      3
(1 row)

 

DROP TABLE

=> DROP mem_size_table;



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章