1. 程式人生 > >【Kylin實戰】郵件報表生成

【Kylin實戰】郵件報表生成

在cube build完成後,我的工作是寫sql生成資料分析郵件報表。但是,問題是這種重複勞動效率低、易出錯、浪費時間。還好Kylin提供RESTful API,可以將這種資料分析需求轉換成HTTP請求。

1. RESTful API

Kylin的認證是basic authentication,加密演算法是Base64,加密的明文為username:password;在POST的header進行使用者認證:

curl -c cookiefile.txt -X POST -H "Authorization: Basic QURNSU46S1lMSU4=" -H 'Content-Type: application/json' http://<host>:7070/kylin/api/user/authentication

在認證完成之後,可以複用cookie檔案(不再需要重新認證),向Kylin傳送GET或POST請求,比如,查詢cube的資訊:

curl -b cookiefile.txt -H 'Content-Type: application/json' http://<host>:7070/kylin/api/cubes/kylin_sales_cube

若要向Kylin傳送sql query,則POST請求中的data應遵從如下JSON規範:

{  
   "sql":"select * from TEST_KYLIN_FACT",
   "offset":0,
   "limit":50000,
   "acceptPartial":false,
   "project":"DEFAULT"
}

其中,offset為sql中相對記錄首行的偏移量,limit為限制記錄條數;二者在後臺處理時都會拼接到sql中去。傳送sql query的curl命令:

curl -b cookiefile.txt -X POST -H 'Content-Type: application/json' -d '{"sql":"select part_dt, sum(price) as total_selled, count(distinct seller_id) as sellers from kylin_sales group by part_dt", "offset":0, "limit":50000, "acceptPartial":false, "project":"learn_kylin"}' http://<host>:7070/kylin/api/query

curl -b cookiefile.txt -X POST -H 'Content-Type: application/json' -d @sql.json http://<host>:7070/kylin/api/query

2. Python實踐

Python的神模組requests已封裝好了HTTP請求與返回,好用到爆!Session物件解決了認證、cookie持久化(persistent)的問題:

s = requests.session()
headers = {'Authorization': 'Basic QURNSU46S1lMSU4='}
s.post(url, headers=headers)

Session物件能複用TCP連線,不用生成cookie檔案,而進行下一步HTTP請求:

# query cube info
url2 = 'http://<host>:7070/kylin/api/cubes/kylin_sales_cube'
r = s.get(url2)
r.json()

# sql query
url3 = 'http://<host>:7070/kylin/api/query'
sql_str = 'select part_dt, sum(price) as total_selled, count(distinct seller_id) as sellers from kylin_sales group by part_dt'
json_str = '{"sql":"' + sql_str + '", "offset": 0, "limit": 50000, acceptPartial": false, "project": "learn_kylin"}'
r = s.post(url3, data=json_str)
results = r.json()['results']

Kylin的sql query的查詢結果在results,其型別為list[list]。因此,封裝Kylin的認證與sql查詢介面如下:

import requests


def authenticate():
    """
    authenticate user
    :return: session
    """
    url = 'http://<host>:7070/kylin/api/user/authentication'
    headers = {'Authorization': 'Basic QURNSU46S1lMSU4='}
    s = requests.session()
    s.headers.update({'Content-Type': 'application/json'})
    s.post(url, headers=headers)
    return s


def query(sql_str, session):
    """
    sql query
    :param sql_str: string of sql 
    :param session: session object
    :return: results(type is list)
    """
    url = 'http://<host>:7070/kylin/api/query'
    json_str = '{"sql":"' + sql_str + '", "offset": 0, "limit": 50000, ' \
                                      '"acceptPartial": false, "project": "xxx"}'
    r = session.post(url, data=json_str)
    results = r.json()['results']
    return results

後面郵件報表的生成,得具體聯絡業務需求。這裡,分享一下新增郵件附件的方法:

msg = MIMEMultipart()
att1 = MIMEText(open('./resources/xxx.csv', 'rb').read(), 'base64', 'gb2312')
att1["Content-Type"] = 'application/octet-stream'
att1["Content-Disposition"] = 'attachment; filename="xxx.csv"'
msg.attach(att1)

相關推薦

Kylin實戰郵件報表生成

在cube build完成後,我的工作是寫sql生成資料分析郵件報表。但是,問題是這種重複勞動效率低、易出錯、浪費時間。還好Kylin提供RESTful API,可以將這種資料分析需求轉換成HTTP請求。 1. RESTful API Kylin的認證是basic authentication,加密演算法是B

Kylin實戰Hive複雜資料型別與檢視

1. 引言 在分析廣告日誌時,會有這樣的多維分析需求: 曝光、點選使用者分別有多少? 標籤能覆蓋多少廣告使用者? 各個標籤(標註)類別能覆蓋的曝光、點選在各個DSP上所覆蓋的使用者數 …… 廣告資料與標籤資料join之後,儲存orc file的schema如下: create external table

Maven實戰生成專案站點

最簡單的站點 通過【maven-site-plugin】生成 Pom配置 Maven3: <pluginManagement> <plugins>

學習筆記Java中生成對象的5中方法

目標 獲得 cti com pre lan except 我們 highlight 概述:本文介紹以下java五種創建對象的方式: 1.用new語句創建對象,這是最常用的創建對象的方式。 2.使用Class類的newInstance方法 3.運用反射手段,調用java.la

20170721L08-02-02老男孩Linux運維實戰培訓初級第八節課課前上機實戰考試講解

sersync主要還是講rsync的實踐上機實驗還有寫一些腳本下面是自動備份的腳本#bak site and logscd /var/html && tar zcf /backup/www_$(date +%F).tar.gz ./wwwcd /app && tar zc

TensorFlow實戰TensorFlow實現經典卷積神經網絡之VGGNet

3*3 一次 卷積神經網絡 有意 研究 而不是 不同等級 帶來 這一 VGGNet   VGGNet是牛津大學計算機視覺組與Google DeepMind公司的研究員一起研發的深度卷積神經網絡。VGGNet探索了卷積神經網絡的深度與其性能之間的關系,通過反復堆疊3*3的小型

TensorFlow實戰TensorFlow實現經典卷積神經網絡之ResNet

man bject dep lte 也會 weight params detail 三層 ResNet   ResNet(Residual Neural Network)通過使用Residual Unit成功訓練152層深的神經網絡,在ILSVRC 2015比賽中獲得冠軍

FastReport教程報表的預覽模式下復制或刪除頁面

src 內置 rep lis 我們 根據 必須 只有一個 http 下載FastReport.Net最新版本 在FastReport 2018.4中,出現了一個非常有趣的功能 - 在預覽模式下復制和刪除報表頁面。也就是說,您可以選擇特定的報表頁面並根據需要多次克隆,或刪除所

專案實戰 使用者模組 驗證碼程式

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

MyBatis Generator程式碼自動生成工具 generatorConfig.xml配置檔案詳解

MyBatis Generator官網地址:http://www.mybatis.org/generator/index.html MyBaris Generator中文地址:http://mbg.cndocs.ml/ 在MBG中,最主要也最重要的,就是generatorConfig.xml

專案實戰:python:MongoDB資料庫的操作及練習

python:MongoDB資料庫的操作及練習 import pymongo class MongodbConn(object): def __init__(self): self.CONN = pymongo.MongoClient("mongodb:/

AI實戰快速掌握TensorFlow(三):激勵函式

到現在我們已經瞭解了TensorFlow的特點和基本操作(見文章:快速掌握TensorFlow(一)),以及TensorFlow計算圖、會話的操作(見文章:快速掌握TensorFlow(二)),接下來我們將繼續學習掌握TensorFlow。 本文主要是學習掌握TensorFlow的激勵函式

AI實戰動手訓練自己的目標檢測模型(YOLO篇)

在前面的文章中,已經介紹了基於SSD使用自己的資料訓練目標檢測模型(見文章:手把手教你訓練自己的目標檢測模型),本文將基於另一個目標檢測模型YOLO,介紹如何使用自己的資料進行訓練。   YOLO(You only look once)是目前流行的目標檢測模型之一,目前最新已經發

AI實戰手把手教你訓練自己的目標檢測模型(SSD篇)

目標檢測是AI的一項重要應用,通過目標檢測模型能在影象中把人、動物、汽車、飛機等目標物體檢測出來,甚至還能將物體的輪廓描繪出來,就像下面這張圖,是不是很酷炫呢,嘿嘿 在動手訓練自己的目標檢測模型之前,建議先了解一下目標檢測模型的原理(見文章:大話目標檢測經典模型RCNN、Fast RCN

AI實戰訓練第一個AI模型:MNIST手寫數字識別模型

在上篇文章中,我們已經把AI的基礎環境搭建好了(見文章:Ubuntu + conda + tensorflow + GPU + pycharm搭建AI基礎環境),接下來將基於tensorflow訓練第一個AI模型:MNIST手寫數字識別模型。 MNIST是一個經典的手寫數字資料集,來自美國國家

AI實戰基礎環境搭建(Ubuntu+conda+tensorflow+GPU+PyCharm)

為方便日常的深度學習模型開發與測試,在自己筆記本上搭建一個深度學習的基礎環境,便於學習AI使用。本人使用的筆記本配置是CPU為8代i5,顯示卡為GTX1060,記憶體為8G,基本上可滿足日常的AI研究與學習。下面將介紹基礎環境的搭建配置過程: 1、安裝Ubuntu 18.04

AI實戰動手實現人臉識別程式

人臉識別在現實生活中有非常廣泛的應用,例如iPhone X的識別人臉解鎖螢幕、人臉識別考勤機、人臉識別開門禁、刷臉坐高鐵,還有識別人臉虛擬化妝、美顏,甚至支付寶還推出了刷臉支付、建設銀行還實現了刷臉取錢……,可見人臉識別的用處非常廣。   既然人臉識別這麼有用,那我們能否自己來實現一

AI實戰快速掌握TensorFlow(二):計算圖、會話

在前面的文章中,我們已經完成了AI基礎環境的搭建(見文章:Ubuntu + Anaconda + TensorFlow + GPU + PyCharm搭建AI基礎環境),以及初步瞭解了TensorFlow的特點和基本操作(見文章:快速掌握TensorFlow(一)),接下來將繼續學習掌握Tenso

AI實戰快速掌握Tensorflow(一):基本操作

Tensorflow是Google開源的深度學習框架,來自於Google Brain研究專案,在Google第一代分散式機器學習框架DistBelief的基礎上發展起來。Tensorflow於2015年11月在GitHub上開源,在2016年4月補充了分散式版本,最新版本為1.10,2018年

AI實戰快速掌握TensorFlow(四):損失函式

在前面的文章中,我們已經學習了TensorFlow激勵函式的操作使用方法(見文章:快速掌握TensorFlow(三)),今天我們將繼續學習TensorFlow。 本文主要是學習掌握TensorFlow的損失函式。 一、什麼是損失函式 損失函式(loss function)是機器學習