如何使用FunctionCompute對(duì)表格存儲(chǔ)中數(shù)據(jù)做簡(jiǎn)單清洗

今天就跟大家聊聊有關(guān) 如何使用Function Compute對(duì)表格存儲(chǔ)中數(shù)據(jù)做簡(jiǎn)單清洗,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

創(chuàng)新互聯(lián)是一家企業(yè)級(jí)云計(jì)算解決方案提供商,超15年IDC數(shù)據(jù)中心運(yùn)營(yíng)經(jīng)驗(yàn)。主營(yíng)GPU顯卡服務(wù)器,站群服務(wù)器,雅安移動(dòng)機(jī)房,海外高防服務(wù)器,成都機(jī)柜租用,動(dòng)態(tài)撥號(hào)VPS,海外云手機(jī),海外云服務(wù)器,海外服務(wù)器租用托管等。

函數(shù)計(jì)算(Function Compute) 是一個(gè)事件驅(qū)動(dòng)的服務(wù),通過(guò)函數(shù)計(jì)算,用戶無(wú)需管理服務(wù)器等運(yùn)行情況,只需編寫(xiě)代碼并上傳。函數(shù)計(jì)算準(zhǔn)備計(jì)算資源,并以彈性伸縮的方式運(yùn)行用戶代碼,而用戶只需根據(jù)實(shí)際代碼運(yùn)行所消耗的資源進(jìn)行付費(fèi)。

Table Store Stream是用于獲取Table Store表中增量數(shù)據(jù)的一個(gè)數(shù)據(jù)通道,通過(guò)創(chuàng)建Table Store觸發(fā)器,能夠?qū)崿F(xiàn)Table Store Stream和函數(shù)計(jì)算的自動(dòng)對(duì)接,讓計(jì)算函數(shù)中自定義的程序邏輯自動(dòng)處理Table Store表中發(fā)生的數(shù)據(jù)修改。

表格存儲(chǔ)高并發(fā)的寫(xiě)入性能以及低廉的存儲(chǔ)成本非常適合物聯(lián)網(wǎng)、日志、監(jiān)控?cái)?shù)據(jù)的存儲(chǔ),我們可以將數(shù)據(jù)寫(xiě)入到表格存儲(chǔ)中,同時(shí)在函數(shù)計(jì)算中對(duì)新增的數(shù)據(jù)做簡(jiǎn)單的清洗、轉(zhuǎn)換、聚合計(jì)算等操作,并將清洗之后的數(shù)據(jù)寫(xiě)回到表格存儲(chǔ)的結(jié)果表中,并對(duì)原始明細(xì)數(shù)據(jù)及結(jié)果數(shù)據(jù)提供實(shí)時(shí)訪問(wèn)。

下面,我們使用函數(shù)計(jì)算對(duì)表格存儲(chǔ)中的數(shù)據(jù)做簡(jiǎn)單的清洗,并寫(xiě)入到結(jié)果表中。

數(shù)據(jù)定義

我們假設(shè)寫(xiě)入的為日志數(shù)據(jù),包括三個(gè)基礎(chǔ)字段:

字段名稱類型含義
id整型日志id
level整型日志的等級(jí),越大表明等級(jí)越高
message字符串日志的內(nèi)容

我們需要將 level>1 的日志寫(xiě)入到另外一張數(shù)據(jù)表中,用作專門(mén)的查詢。

實(shí)現(xiàn)過(guò)程:

創(chuàng)建實(shí)例及數(shù)據(jù)表

在表格存儲(chǔ)的控制臺(tái)創(chuàng)建表格存儲(chǔ)實(shí)例(__本次以 華東2 distribute-test 為例__),并創(chuàng)建源表(__source_data__)及結(jié)果表(__result__),主鍵為均 __id (整型)__,由于表格存儲(chǔ)是 schemafree 結(jié)構(gòu),無(wú)需預(yù)先定義其他屬性列字段。

如何使用Function Compute對(duì)表格存儲(chǔ)中數(shù)據(jù)做簡(jiǎn)單清洗

開(kāi)啟數(shù)據(jù)源表的Stream功能

觸發(fā)器功能需要先開(kāi)啟數(shù)據(jù)表的Stream功能,才能在函數(shù)計(jì)算中處理寫(xiě)入表格存儲(chǔ)中的增量數(shù)據(jù)。

如何使用Function Compute對(duì)表格存儲(chǔ)中數(shù)據(jù)做簡(jiǎn)單清洗

Stream記錄過(guò)期時(shí)長(zhǎng) 為通過(guò) StreamAPI 能夠讀取到的增量數(shù)據(jù)的最長(zhǎng)時(shí)間。

由于觸發(fā)器只能綁定現(xiàn)有的函數(shù),故先到函數(shù)計(jì)算的控制臺(tái)上在同region創(chuàng)建服務(wù)及函數(shù)。

創(chuàng)建函數(shù)計(jì)算服務(wù)

在函數(shù)計(jì)算的控制臺(tái)上創(chuàng)建服務(wù)及處理函數(shù),我們繼續(xù)使用華東2節(jié)點(diǎn)。

1.在華東2節(jié)點(diǎn)創(chuàng)建服務(wù)。

如何使用Function Compute對(duì)表格存儲(chǔ)中數(shù)據(jù)做簡(jiǎn)單清洗

2.創(chuàng)建函數(shù)依次選擇:空白函數(shù)——不創(chuàng)建觸發(fā)器。

如何使用Function Compute對(duì)表格存儲(chǔ)中數(shù)據(jù)做簡(jiǎn)單清洗

如何使用Function Compute對(duì)表格存儲(chǔ)中數(shù)據(jù)做簡(jiǎn)單清洗

  • 函數(shù)名稱為:etl_test,選擇 python2.7 環(huán)境,在線編輯代碼

  • 函數(shù)入口為:etl_test.handler

  • 代碼稍后編輯,點(diǎn)擊下一步。

3.進(jìn)行服務(wù)授權(quán)

由于函數(shù)計(jì)算需要將運(yùn)行中的日志寫(xiě)入到日志服務(wù)中,同時(shí),需要對(duì)表格存儲(chǔ)的表進(jìn)行讀寫(xiě),故需要對(duì)函數(shù)計(jì)算進(jìn)行授權(quán),為方便起見(jiàn),我們先添加 AliyunOTSFullAccess 與 __AliyunLogFullAccess __權(quán)限,實(shí)際生產(chǎn)中,建議根據(jù)權(quán)限最小原則來(lái)添加權(quán)限。

如何使用Function Compute對(duì)表格存儲(chǔ)中數(shù)據(jù)做簡(jiǎn)單清洗

4.點(diǎn)擊授權(quán)完成,并創(chuàng)建函數(shù)。

5.修改函數(shù)代碼。

創(chuàng)建好函數(shù)之后,點(diǎn)擊對(duì)應(yīng)的函數(shù)代碼執(zhí)行,編輯代碼并保存,其中,INSTANCE_NAME(表格存儲(chǔ)的實(shí)例名稱)、REGION(使用的區(qū)域)需要根據(jù)情況進(jìn)行修改:如何使用Function Compute對(duì)表格存儲(chǔ)中數(shù)據(jù)做簡(jiǎn)單清洗

使用示例代碼如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import cbor
import json
import tablestore as ots

INSTANCE_NAME = 'distribute-test'
REGION = 'cn-shanghai'
ENDPOINT = 'http://%s.%s.ots-internal.aliyuncs.com'%(INSTANCE_NAME, REGION)
RESULT_TABLENAME = 'result'


def _utf8(input):
    return str(bytearray(input, "utf-8"))

def get_attrbute_value(record, column):
    attrs = record[u'Columns']
    for x in attrs:
        if x[u'ColumnName'] == column:
            return x['Value']

def get_pk_value(record, column):
    attrs = record[u'PrimaryKey']
    for x in attrs:
        if x['ColumnName'] == column:
            return x['Value']

#由于已經(jīng)授權(quán)了AliyunOTSFullAccess權(quán)限,此處獲取的credentials具有訪問(wèn)表格存儲(chǔ)的權(quán)限
def get_ots_client(context):
    creds = context.credentials
    client = ots.OTSClient(ENDPOINT, creds.accessKeyId, creds.accessKeySecret, INSTANCE_NAME, sts_token = creds.securityToken)
    return client

def save_to_ots(client, record):
    id = int(get_pk_value(record, 'id'))
    level = int(get_attrbute_value(record, 'level'))
    msg = get_attrbute_value(record, 'message')

    pk = [(_utf8('id'), id),]
    attr = [(_utf8('level'), level), (_utf8('message'), _utf8(msg)),]
    row = ots.Row(pk, attr)
    client.put_row(RESULT_TABLENAME, row)

def handler(event, context):
    records = cbor.loads(event)
    #records = json.loads(event)
    client = get_ots_client(context)
    for record in records['Records']:
        level = int(get_attrbute_value(record, 'level'))
        if level > 1:
            save_to_ots(client, record)
        else:
            print "Level <= 1, ignore."

對(duì)表格存儲(chǔ) Stream 數(shù)據(jù)的格式詳情請(qǐng)參考Stream 數(shù)據(jù)處理

綁定觸發(fā)器

1.回到表格存儲(chǔ)的實(shí)例管理頁(yè)面,點(diǎn)擊表 source_data 后的 使用觸發(fā)器 按鈕,進(jìn)入觸發(fā)器綁定界面,點(diǎn)擊使用已有函數(shù)計(jì)算, 選擇剛創(chuàng)建的服務(wù)及函數(shù),勾選 表格存儲(chǔ)發(fā)送事件通知的權(quán)限, 進(jìn)行確定。如何使用Function Compute對(duì)表格存儲(chǔ)中數(shù)據(jù)做簡(jiǎn)單清洗

2.綁定成功之后,能夠看到如下的信息:如何使用Function Compute對(duì)表格存儲(chǔ)中數(shù)據(jù)做簡(jiǎn)單清洗

運(yùn)行驗(yàn)證

1.向 source_data 表中寫(xiě)入數(shù)據(jù)。如何使用Function Compute對(duì)表格存儲(chǔ)中數(shù)據(jù)做簡(jiǎn)單清洗

2.在 result 表中查詢清洗后的數(shù)據(jù)

點(diǎn)擊 result 表的數(shù)據(jù)管理頁(yè)面,會(huì)查詢到剛寫(xiě)入到 source_data 中的數(shù)據(jù)。
當(dāng)然,向 soure_data 寫(xiě)入level <=1的數(shù)據(jù)將不會(huì)同步到 result 表中

如何使用Function Compute對(duì)表格存儲(chǔ)中數(shù)據(jù)做簡(jiǎn)單清洗

看完上述內(nèi)容,你們對(duì) 如何使用Function Compute對(duì)表格存儲(chǔ)中數(shù)據(jù)做簡(jiǎn)單清洗有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

分享文章:如何使用FunctionCompute對(duì)表格存儲(chǔ)中數(shù)據(jù)做簡(jiǎn)單清洗
標(biāo)題URL:http://muchs.cn/article22/pjjpjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、網(wǎng)站導(dǎo)航、靜態(tài)網(wǎng)站、網(wǎng)站收錄企業(yè)建站、小程序開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)