日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

云數(shù)據(jù)庫(kù)HBase

更新時(shí)間:

本文為您介紹如何使用云數(shù)據(jù)庫(kù)HBase連接器。

背景信息

云數(shù)據(jù)庫(kù)HBase是低成本、高擴(kuò)展、云智能的大數(shù)據(jù)NoSQL,兼容標(biāo)準(zhǔn)HBase訪問協(xié)議,提供低成本存儲(chǔ)、高擴(kuò)展吞吐、智能數(shù)據(jù)處理等核心優(yōu)勢(shì),是為淘寶推薦、花唄風(fēng)控、廣告投放、監(jiān)控大屏、菜鳥物流軌跡、支付寶賬單、手淘消息等眾多阿里巴巴核心服務(wù)提供支撐的數(shù)據(jù)庫(kù),具備PB規(guī)模、高并發(fā)、秒級(jí)伸縮、毫秒響應(yīng)、跨機(jī)房高可用、全托管、全球分布等企業(yè)能力。

HBase連接器支持的信息如下:

類別

詳情

支持類型

維表和結(jié)果表

運(yùn)行模式

流模式

數(shù)據(jù)格式

暫不支持

特有監(jiān)控指標(biāo)

  • 源表

    支持的監(jiān)控指標(biāo):無。

  • 維表

    支持的監(jiān)控指標(biāo):無。

  • 結(jié)果表

    支持的監(jiān)控指標(biāo):numBytesOut、numBytesOutPerSecond、numRecordsOut、numRecordsOutPerSecond、currentSendTime。

    說明

    指標(biāo)含義詳情,請(qǐng)參見監(jiān)控指標(biāo)說明

API種類

SQL

是否支持更新或刪除結(jié)果表數(shù)據(jù)

前提條件

注意事項(xiàng)

使用前,請(qǐng)確認(rèn)已創(chuàng)建數(shù)據(jù)庫(kù)實(shí)例類型,并選擇正確的連接器,使用不當(dāng)?shù)倪B接器可能會(huì)導(dǎo)致不可預(yù)期的問題:

  • 云數(shù)據(jù)庫(kù)HBase實(shí)例,使用本文的HBase連接器。

  • Lindorm實(shí)例兼容HBase模式,使用Lindorm連接器,詳情請(qǐng)參見云原生多模數(shù)據(jù)庫(kù)Lindorm

  • 如果連接開源HBase,則無法保證數(shù)據(jù)的正確性。

語(yǔ)法結(jié)構(gòu)

CREATE TABLE hbase_table(
  rowkey INT,
  family1 ROW<q1 INT>,
  family2 ROW<q2 STRING, q3 BIGINT>,
  family3 ROW<q4 DOUBLE, q5 BOOLEAN, q6 STRING>
) WITH (
  'connector'='cloudhbase',
  'table-name'='<yourTableName>',
  'zookeeper.quorum'='<yourZookeeperQuorum>'
);
  • HBase的列族(Column Family)必須聲明為ROW類型,列族名即該ROW的字段名。例如,DDL定義中聲明了family1、family2和family3三個(gè)列族。

  • HBase列族中的列(Column)與對(duì)應(yīng)ROW中嵌套的每個(gè)字段對(duì)應(yīng),列名即字段名。例如,DDL定義中列族family2聲明了q2和q3兩列。

  • 除了類型為ROW的字段外,只能有一個(gè)原始類型(Atomic Type)的字段(例如STRING或BIGINT),該字段將被視作HBase的行鍵(Row Key),例如DDL定義中的Rowkey。

  • 必須將HBase的行鍵定義為結(jié)果表的主鍵(Primary Key),如果沒有顯示定義主鍵,默認(rèn)使用行鍵作為主鍵。

  • 結(jié)果表中不需要將HBase表的所有列族和列都進(jìn)行聲明,只聲明需要的即可。

WITH參數(shù)

  • 通用

    參數(shù)

    說明

    數(shù)據(jù)類型

    是否必填

    默認(rèn)值

    備注

    connector

    表類型。

    String

    固定值為cloudhbase

    table-name

    HBase表名。

    String

    無。

    zookeeper.znode.quorum

    HBase的zookeeper住址。

    String

    無。

    zookeeper.znode.parent

    HBase在zookeeper中的根目錄。

    String

    /hbase

    僅在HBase標(biāo)準(zhǔn)版中生效。

    userName

    用戶名。

    String

    僅在HBase增強(qiáng)版中生效。

    password

    密碼。

    String

    僅在HBase增強(qiáng)版中生效。

    haclient.cluster.id

    HBase高可用實(shí)例ID。

    String

    只有訪問同城主備實(shí)例時(shí)才需要配置僅在HBase增強(qiáng)版中生效。

    retires.number

    HBase客戶端的重試次數(shù)。

    Integer

    31

    無。

    null-string-literal

    HBase字段類型為字符串時(shí),如果Flink字段數(shù)據(jù)為null,則將該字段賦值為null-string-literal,并寫入HBase。

    String

    null

    無。

  • 結(jié)果表獨(dú)有

    參數(shù)

    說明

    數(shù)據(jù)類型

    是否必填

    默認(rèn)值

    備注

    sink.buffer-flush.max-size

    寫入HBase前,內(nèi)存中緩存的數(shù)據(jù)量(字節(jié))大小。調(diào)大該值有利于提高HBase寫入性能,但會(huì)增加寫入延遲和內(nèi)存使用。

    String

    2MB

    支持字節(jié)單位B、KB、MB和GB,不區(qū)分大小寫。設(shè)置為0表示不進(jìn)行緩存。

    sink.buffer-flush.max-rows

    寫入HBase前,內(nèi)存中緩存的數(shù)據(jù)條數(shù)。調(diào)大該值有利于提高HBase寫入性能,但會(huì)增加寫入延遲和內(nèi)存使用。

    Integer

    1000

    設(shè)置為0表示不進(jìn)行緩存。

    sink.buffer-flush.interval

    將緩存數(shù)據(jù)周期性寫入到HBase的間隔,可以控制寫入HBase的延遲。

    Duration

    1s

    支持時(shí)間單位ms、s、min、h和d。設(shè)置為0表示關(guān)閉定期寫入。

    dynamic.table

    是否使用支持動(dòng)態(tài)列的HBase表。

    Boolean

    false

    參數(shù)取值如下:

    • true:使用支持動(dòng)態(tài)列的HBase表。

    • false:不使用支持動(dòng)態(tài)列的HBase表。

    sink.ignore-delete

    是否忽略撤回消息。

    Boolean

    false

    參數(shù)取值如下:

    • true:忽略撤回消息。

    • false:不忽略撤回消息。

    說明

    僅實(shí)時(shí)計(jì)算引擎VVR 4.0.10及以上版本支持該參數(shù)。

    sink.sync-write

    是否同步寫入HBase。

    Boolean

    true

    參數(shù)取值如下:

    • true:同步寫,保證順序,會(huì)犧牲一定性能。

    • false:異步寫,不保證順序,性能更好。

    說明

    僅實(shí)時(shí)計(jì)算引擎VVR 4.0.13及以上版本支持該參數(shù)。

    sink.buffer-flush.batch-rows

    同步寫入HBase時(shí)內(nèi)存中緩存的數(shù)據(jù)條數(shù),調(diào)大該值有利于提高HBase寫入性能,但會(huì)增加寫入延遲和內(nèi)存使用。

    Integer

    100

    僅當(dāng)sink.sync-write為true時(shí)生效。

    說明

    僅實(shí)時(shí)計(jì)算引擎VVR 4.0.13及以上版本支持該參數(shù)。

    sink.ignore-null

    是否忽略寫入null值。

    Boolean

    false

    說明
    • 設(shè)置成true時(shí),參數(shù)null-string-literal將不再生效。

    • 僅實(shí)時(shí)計(jì)算引擎VVR 8.0.9及以上版本支持該參數(shù)。

  • 維表獨(dú)有(比如Cache參數(shù))

    參數(shù)

    說明

    數(shù)據(jù)類型

    是否必填

    默認(rèn)值

    備注

    cache

    緩存策略。

    String

    ALL

    目前云數(shù)據(jù)庫(kù)HBase版維表支持以下三種緩存策略:

    • None:無緩存。

    • LRU:緩存維表里的部分?jǐn)?shù)據(jù)。源表的每條數(shù)據(jù)都會(huì)觸發(fā)系統(tǒng)先在Cache中查找數(shù)據(jù),如果沒有找到,則去物理維表中查找。

      說明

      需要配置相關(guān)參數(shù):緩存大小(cacheSize)和緩存更新時(shí)間間隔(cacheTTLMs)。

    • ALL(默認(rèn)值):緩存維表里的所有數(shù)據(jù)。在Job運(yùn)行前,系統(tǒng)會(huì)將維表中所有數(shù)據(jù)加載到Cache中,之后所有的維表查找數(shù)據(jù)都會(huì)通過Cache進(jìn)行。如果在Cache中無法找到數(shù)據(jù),則KEY不存在,并在Cache過期后重新加載一遍全量Cache。

      說明
      • 適用于遠(yuǎn)程表數(shù)據(jù)量小且MISS KEY(源表數(shù)據(jù)和維表JOIN時(shí),ON條件無法關(guān)聯(lián))特別多的場(chǎng)景。需要配置相關(guān)參數(shù):緩存更新時(shí)間間隔cacheTTLMs,更新時(shí)間黑名單cacheReloadTimeBlackList

      • 維表中所有數(shù)據(jù)加載到緩存中,可能會(huì)導(dǎo)致作業(yè)啟動(dòng)變慢,您可以根據(jù)業(yè)務(wù)需求靈活配置緩存策略。

    因?yàn)橄到y(tǒng)會(huì)異步加載維表數(shù)據(jù),所以在使用CACHE ALL時(shí),需要增加維表JOIN節(jié)點(diǎn)的內(nèi)存,增加的內(nèi)存大小為遠(yuǎn)程表數(shù)據(jù)量的兩倍。

    cacheSize

    緩存大小。

    Long

    10000

    當(dāng)緩存策略選擇LRU時(shí),可以設(shè)置緩存大小。

    cacheTTLMs

    緩存失效時(shí)間,單位為毫秒。

    Long

    cacheTTLMs配置和cache有關(guān):

    • 如果cache配置為None,則cacheTTLMs可以不配置,表示緩存不超時(shí)。

    • 如果cache配置為L(zhǎng)RU,則cacheTTLMs為緩存超時(shí)時(shí)間。默認(rèn)不過期。

    • 如果cache配置為ALL,則cacheTTLMs為緩存加載時(shí)間。默認(rèn)不重新加載。

    cacheEmpty

    是否緩存空結(jié)果。

    Boolean

    true

    無。

    cacheReloadTimeBlackList

    更新時(shí)間黑名單。在緩存策略選擇為ALL時(shí),啟用更新時(shí)間黑名單,防止在此時(shí)間內(nèi)做Cache更新(例如雙11場(chǎng)景)。

    String

    格式為2017-10-24 14:00 -> 2017-10-24 15:00,2017-11-10 23:30 -> 2017-11-11 08:00。分隔符的使用情況如下所示:

    • 用英文逗號(hào)(,)來分隔多個(gè)黑名單。

    • 用箭頭(->)來分割黑名單的起始結(jié)束時(shí)間。

    cacheScanLimit

    讀取全量HBase數(shù)據(jù),RPC(Remote Procedure Call Protocol)服務(wù)端一次返回給客戶端的行數(shù)。

    Integer

    100

    緩存策略選擇ALL時(shí)啟用。

類型映射

Flink中的數(shù)據(jù)類型在HBase中通過org.apache.hadoop.hbase.util.Bytes轉(zhuǎn)換成字節(jié)數(shù)組,解碼過程有以下兩種情況:

  • 對(duì)于Flink的非字符串類型,如果HBase中的值為空字節(jié)數(shù)組,則解碼為null。

  • 對(duì)于Flink的字符串類型,如果HBase中的值為null-string-literal字節(jié)數(shù)組,則解碼為null。

Flink SQL類型

寫入Bytes時(shí)CloudHBase轉(zhuǎn)換函數(shù)

從CloudHBase讀取Bytes的轉(zhuǎn)換函數(shù)

CHAR

byte[] toBytes(String s)

String toString(byte[] b)

VARCHAR

STRING

BOOLEAN

byte[] toBytes(boolean b)

boolean toBoolean(byte[] b)

BINARY

byte[]

byte[]

VARBINARY

DECIMAL

byte[] toBytes(BigDecimal v)

BigDecimal toBigDecimal(byte[] b)

TINYINT

new byte[] { val }

bytes[0]

SMALLINT

byte[] toBytes(short val)

short toShort(byte[] bytes)

INT

byte[] toBytes(int val)

int toInt(byte[] bytes)

BIGINT

byte[] toBytes(long val)

long toLong(byte[] bytes)

FLOAT

byte[] toBytes(float val)

float toFloat(byte[] bytes)

DOUBLE

byte[] toBytes(double val)

double toDouble(byte[] bytes)

DATE

將日期轉(zhuǎn)換成自1970.01.01以來的天數(shù),用int表示,并通過byte[] toBytes(int val) 轉(zhuǎn)換成字節(jié)數(shù)組。

HBase字節(jié)數(shù)組通過int toInt(byte[] bytes) 轉(zhuǎn)換成int,表示自1970.01.01以來的天數(shù)。

TIME

將時(shí)間轉(zhuǎn)換成自00:00:00以來的毫秒數(shù),用int表示,并通過byte[] toBytes(int val) 轉(zhuǎn)換成字節(jié)數(shù)組。

HBase字節(jié)數(shù)組通過int toInt(byte[] bytes) 轉(zhuǎn)換成int,表示自00:00:00以來的毫秒數(shù)。

TIMESTAMP

將時(shí)間戳轉(zhuǎn)換成自1970-01-01 00:00:00以來的毫秒數(shù),用long表示,并通過byte[] toBytes(long val) 轉(zhuǎn)換成字節(jié)數(shù)組。

HBase字節(jié)數(shù)組通過long toLong(byte[] bytes) ,表示自1970-01-01 00:00:00以來的毫秒數(shù)。

代碼示例

  • 維表示例。

    CREATE TEMPORARY TABLE datagen_source (
      a INT,
      b BIGINT,
      c STRING,
      `proc_time` AS PROCTIME()
    ) WITH (
      'connector'='datagen'
    );
    
    CREATE TEMPORARY TABLE hbase_dim (
      rowkey INT,
      family1 ROW<col1 INT>,
      family2 ROW<col1 STRING, col2 BIGINT>,
      family3 ROW<col1 DOUBLE, col2 BOOLEAN, col3 STRING>
    ) WITH (
      'connector' = 'cloudhbase',
      'table-name' = '<yourTableName>',
      'zookeeper.quorum' = '<yourZookeeperQuorum>'
    );
    
    CREATE TEMPORARY TABLE blackhole_sink(
      a INT,
      f1c1 INT,
      f3c3 STRING
    ) WITH (
      'connector' = 'blackhole'
    );
    
    INSERT INTO blackhole_sink
         SELECT a, family1.col1 as f1c1,  family3.col3 as f3c3 FROM datagen_source
    JOIN hbase_dim FOR SYSTEM_TIME AS OF datagen_source.`proc_time` as h ON datagen_source.a = h.rowkey;
  • 結(jié)果表示例。

    CREATE TEMPORARY TABLE datagen_source (
      rowkey INT,
      f1q1 INT,
      f2q1 STRING,
      f2q2 BIGINT,
      f3q1 DOUBLE,
      f3q2 BOOLEAN,
      f3q3 STRING
    ) WITH (
      'connector'='datagen'
    );
    
    CREATE TEMPORARY TABLE hbase_sink (
      rowkey INT,
      family1 ROW<q1 INT>,
      family2 ROW<q1 STRING, q2 BIGINT>,
      family3 ROW<q1 DOUBLE, q2 BOOLEAN, q3 STRING>,
      PRIMARY KEY (rowkey) NOT ENFORCED
    ) WITH (
      'connector'='cloudhbase',
      'table-name'='<yourTableName>',
      'zookeeper.quorum'='<yourZookeeperQuorum>'
    );
     
    INSERT INTO hbase_sink
    SELECT rowkey, ROW(f1q1), ROW(f2q1, f2q2), ROW(f3q1, f3q2, f3q3) FROM datagen_source;
  • 結(jié)果動(dòng)態(tài)表示例。

    CREATE TEMPORARY TABLE datagen_source (
      id INT,
      f1hour STRING,
      f1deal BIGINT,
      f2day STRING,
      f2deal BIGINT
    ) WITH (
      'connector'='datagen'
    );
    
    CREATE TEMPORARY TABLE hbase_sink (
      rowkey INT,
      f1 ROW<`hour` STRING, deal BIGINT>,
      f2 ROW<`day` STRING, deal BIGINT>
    ) WITH (
      'connector'='cloudhbase',
      'table-name'='<yourTableName>',
      'zookeeper.quorum'='<yourZookeeperQuorum>',
      'dynamic.table'='true'
    );
    
    INSERT INTO hbase_sink
    SELECT id, ROW(f1hour, f1deal), ROW(f2day, f2deal) FROM datagen_source;
    • 當(dāng)dynamic.table參數(shù)值為true時(shí),表示使用支持動(dòng)態(tài)列的HBase表。

    • 每個(gè)列族對(duì)應(yīng)的ROW中必須聲明兩個(gè)字段:第1個(gè)字段的值表示動(dòng)態(tài)列,第2個(gè)字段的值表示動(dòng)態(tài)列的值。

    • 如果datagen_source表存在一條數(shù)據(jù),代表ID為1的商品,在10:00-11:00點(diǎn)之間的成交額是100,在2020年7月26日當(dāng)天的成交額是10000,則HBase中將插入行鍵為1的行,其中f1:10為100,f2:2020-7-26為10000。