日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

大数据上云第一课:MaxCompute授权和外表操作躲坑指南

發布時間:2024/8/23 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大数据上云第一课:MaxCompute授权和外表操作躲坑指南 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、子賬號創建、AK信息綁定
如果您是第一次使用子賬號登錄數加平臺和使用DataWorks,需要確認以下信息:
? 該子賬號所屬主賬號的企業別名。
? 該子賬號的用戶名和密碼。
? 該子賬號的AccessKey ID和AccessKey Secret。
? 確認主賬號已經允許子賬號啟用控制臺登錄。
? 確認主賬號已經允許子賬號自主管理AccessKey。
1、子賬號創建
(1)創建子賬號
(2)綁定AK信息
(3)DataWorks給定角色
(1)使用阿里云賬號(主賬號)登錄RAM控制臺。
(2)在左側導航欄的人員管理菜單下,單擊用戶。
(3)單擊新建用戶。
(4)輸入登錄名稱和顯示名稱。
(5)在訪問方式區域下,選擇控制臺密碼登錄。
(6)單擊確認。

說明: (1)單擊添加用戶,可一次性創建多個RAM用戶。 (2)RAM用戶創建完成后,務必保存用戶名和登錄密碼,并將其告知子賬號。

2、創建RAM子賬號的訪問密鑰
訪問密鑰對開發人員在DataWorks中創建的任務順利運行非常重要,該密鑰區別于登錄時填寫的賬號和密碼,主要用于在阿里云各產品間互相認證使用權限。因此主賬號需要為子賬號創建AccessKey。創建成功后,請盡可能保證AccessKey ID和AccessKey Secret的安全,切勿讓他人知曉,一旦有泄漏的風險,請及時禁用和更新。運行密鑰AK包括AccessKey ID和AccessKey Secret兩部分。如果云賬號允許RAM用戶自主管理AccessKey,RAM用戶也可以自行創建AccessKey。
為子賬號創建AccessKey的操作如下所示。
(1)在左側導航欄的人員管理菜單下,單擊用戶。
(2)在用戶登錄名稱/顯示名稱列表下,單擊目標RAM用戶名稱。
(3)在用戶AccessKey 區域下,單擊創建新的AccessKey。
(4)單擊確認。

說明: 首次創建時需填寫手機驗證碼。 AccessKeySecret只在創建時顯示,不提供查詢,請妥善保管。若AccessKey泄露或丟失,則需要創建新的AccessKey,最多可以創建2個AccessKey。

3、給RAM子賬號授權
如果您需要讓子賬號能夠創建DataWorks工作空間,需要給子賬號授予AliyunDataWorksFullAccess權限。
(1)在左側導航欄的人員管理菜單下,單擊用戶。
(2)在用戶登錄名稱/顯示名稱列表下,找到目標RAM用戶。
(3)單擊添加權限,被授權主體會自動填入。
(4)在左側權限策略名稱列表下,單擊需要授予RAM用戶的權限策略。
(5)單擊確定。
(6)單擊完成。

說明:在右側區域框,選擇某條策略并單擊×,可撤銷該策略。

二、子賬號生產環境創建函數、訪問資源授權,OSS外部表授權
1、賬號生產環境創建函數、訪問資源授權
子賬號登錄DataWorks控制臺之后,單擊工作空間管理,成員管理給該子賬號一個相應的角色。各角色對應的權限可以在工作空間管理界面的權限列表查看。此處添加的成員角色對生產環境是隔離的。下面介紹一下生產環境創建函數、訪問資源授權。
(1)創建一個新的角色,給角色授權。

創建角色:create role worker; 角色指派:grant worker TO ram$建偉MaxCompute:banzhan;(ram$建偉MaxCompute:banzhan為RAM賬號) 對角色授權:grant CreateInstance, CreateResource, CreateFunction, CreateTable, List ON PROJECT wei_wwww TO ROLE worker;

(2)創建UDF函數。

CREATE FUNCTION banzha_udf as 'com.aliyun.udf.test.UDF_DEMO' using '1218.jar';

前提條件是已經上傳1818.jar包。資源上傳結合搬站第一課視頻。
2、OSS訪問授權
MaxCompute需要直接訪問OSS的數據,前提是需要您將OSS的數據相關權限賦給MaxCompute的訪問賬號。如果沒有進行相應授權創,創建外部表會發現報錯如下:

此時需要我們授權去訪問OSS
授權方式有兩種:
(1)當MaxCompute和OSS的Owner是同一個賬號時,可以直接登錄阿里云賬號后,單擊此處完成一鍵授權。一鍵授權,我們可以在訪問控制給改子賬號添加管理對象存儲服務(OSS)權限(AliyunOSSFullAccess)。
(2)自定義授權
a.新增一個RAM角色oss-admin
b.修改角色策略內容設置

--當MaxCompute和OSS的Owner是同一個賬號,設置如下。 { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": ["odps.aliyuncs.com" ] } } ], "Version": "1" }--當MaxCompute和OSS的Owner不是同一個賬號,設置如下。 { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": ["MaxCompute的Owner云賬號id@odps.aliyuncs.com" ] } } ], "Version": "1" }

c.授予角色訪問OSS必要的權限AliyunODPSRolePolicy

{ "Version": "1", "Statement": [ { "Action": [ "oss:ListBuckets", "oss:GetObject", "oss:ListObjects", "oss:PutObject", "oss:DeleteObject", "oss:AbortMultipartUpload", "oss:ListParts" ], "Resource": "*", "Effect": "Allow" } ] } --可自定義其它權限。

d.將權限AliyunODPSRolePolicy授權給該角色。
三、OSS外部表創建指引
1、外部表創建的語法格式介紹
(1)外部表創建示例:

CREATE EXTERNAL TABLE IF NOT EXISTS fc_rcfile ( `id` int, `name` string ) PARTITIONED BY ( `time_ds` string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe' STORED AS RCFILE LOCATION 'oss://oss-cn-beijing-internal.aliyuncs.com/oss-huabei2/jianwei/fc_rcfile/';

(2)LOCATION說明
LOCATION必須指定一個OSS目錄,默認系統會讀取這個目錄下所有的文件。
建議您使用OSS提供的內網域名,否則將產生OSS流量費用。
訪問OSS外部表,目前不支持使用外網Endpoint。
目前STORE AS單個文件大小不能超過3G,如果文件過大,建議split拆分。
建議您OSS數據存放的區域對應您開通MaxCompute的區域。由于MaxCompute只有在部分區域部署,我們不承諾跨區域的數據連通性。

OSS的連接格式為oss://oss-cn-shanghai-internal.aliyuncs.com/Bucket名稱/目錄名稱/。目錄后不要加文件名稱,以下為錯誤用法。 http://oss-odps-test.oss-cn-shanghai-internal.aliyuncs.com/Demo/ -- 不支持http連接。 https://oss-odps-test.oss-cn-shanghai-internal.aliyuncs.com/Demo/ -- 不支持https連接。 oss://oss-odps-test.oss-cn-shanghai-internal.aliyuncs.com/Demo -- 連接地址錯誤。 oss://oss://oss-cn-shanghai-internal.aliyuncs.com/oss-odps-test/Demo/vehicle.csv -- 不必指定文件名。

(3)外部表創建格式說明
語法格式與Hive的語法相當接近,但需注意以下問題。

a.STORED AS關鍵字,在該語法格式中不是創建普通非結構化外部表時用的STORED BY關鍵字,這是目前在讀取開源兼容數據時獨有的。STORED AS后面接的是文件格式名字,例如ORC/PARQUET/RCFILE/SEQUENCEFILE/TEXTFILE等。 b.外部表的column schemas必須與具體OSS上存儲的數據的schema相符合。 c.ROW FORMAT SERDE:非必選選項,只有在使用一些特殊的格式上,比如TEXTFILE時才需要使用。 d.WITH SERDEPROPERTIES:當關聯OSS權限使用STS模式授權時,需要該參數指定odps.properties.rolearn屬性,屬性值為RAM中具體使用的Role的Arn的信息。您可以在配置STORED AS <file format>的同時也通過<serde class>說明file format文件格式。以ORC文件格式為例,如下所示。 CREATE EXTERNAL TABLE [IF NOT EXISTS] <external_table> (<column schemas>) [PARTITIONED BY (partition column schemas)] ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde' WITH SERDEPROPERTIES ('odps.properties.rolearn'='${roleran}' STORED AS ORC LOCATION 'oss://${endpoint}/${bucket}/${userfilePath}/'e.不同file format對應的serde class如下: ? ALIORC: com.aliyun.apsara.serde.AliOrcSerDe ? SEQUENCEFILE: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe ? TEXTFILE: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe ? RCFILE: org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe ? ORC: org.apache.hadoop.hive.ql.io.orc.OrcSerde ? ORCFILE: org.apache.hadoop.hive.ql.io.orc.OrcSerde ? PARQUET: org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe ? AVRO: org.apache.hadoop.hive.serde2.avro.AvroSerDe

(4)用Arn、AK兩種認證方式建外表示例
a.用RAM中具體使用的Role的Arn的信息創建外部表
當關聯OSS權限使用STS模式授權時,需要該參數指定odps.properties.rolearn屬性,屬性值為RAM中具體使用的Role的Arn的信息。

WITH SERDEPROPERTIES ('odps.properties.rolearn'='${roleran}'

示例如下:

CREATE EXTERNAL TABLE IF NOT EXISTS fc_csv ( vehicleId string, recordId string, patientId string, calls string, locationLatitute string, locationLongtitue string, recordTime string, direction string ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES('separatorChar'=',','odps.properties.rolearn'='acs:ram::1928466352305391:role/oss-admin') STORED AS TEXTFILE LOCATION 'oss://oss-cn-beijing-internal.aliyuncs.com/oss-odps-bucket/extra_test/fc_csv';

b.明文AK創建外部表(不推薦使用這種方式)
如果不使用STS模式授權,則無需指定odps.properties.rolearn屬性,直接在Location傳入明文AccessKeyId和AccessKeySecret。
Location如果關聯OSS,需使用明文AK,寫法如下所示。

LOCATION 'oss://${accessKeyId}:${accessKeySecret}@${endpoint}/${bucket}/${userPath}/'

示例如下:

CREATE EXTERNAL TABLE IF NOT EXISTS fc_csv1 ( vehicleId string, recordId string, patientId string, calls string, locationLatitute string, locationLongtitue string, recordTime string, direction string ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES('separatorChar'=',','odps.properties.rolearn'='acs:ram::1928466352305391:role/oss-admin') STORED AS TEXTFILE -- LOCATION 'oss://oss-cn-beijing-internal.aliyuncs.com/oss-odps-bucket/extra_test/fc_csv'; LOCATION 'oss://LTAI4FfgVEQQwsNQ*******:J8FGZaoj2CMcunFrVn1FrL*****wM@oss-cn-beijing-internal.aliyuncs.com/oss-odps-bucket/extra_test/fc_csv';

2、創建 Rcfile 類型的外部表
(1)查詢HIVE表schema

show create table fc_rcfile;**

結果如下:

CREATE TABLE `fc_rcfile`( `id` int, `name` string) PARTITIONED BY ( `time_ds` string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.RCFileInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.RCFileOutputFormat' LOCATION 'hdfs://emr-header-1.cluster-138804:9000/user/hive/warehouse/extra_demo.db/fc_rcfile'

(2)在MaxCompute創建外部表

CREATE EXTERNAL TABLE IF NOT EXISTS fc_rcfile ( `id` int, `name` string) PARTITIONED BY ( `time_ds` string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe' STORED AS RCFILE LOCATION 'oss://oss-cn-beijing-internal.aliyuncs.com/oss-huabei2/jianwei/fc_rcfile/';

(3)添加分區

alter table fc_rcfile ADD PARTITION (time_ds = '20191209') ; alter table fc_rcfile ADD PARTITION (time_ds = '20191210') ; alter table fc_rcfile ADD PARTITION (time_ds = '20191211') ; 批量創建分區可參數使用MMA工具

(4)查詢數據

select * from fc_rcfile where time_ds = '20191209' ; select * from fc_rcfile where time_ds = '20191210' ; select * from fc_rcfile where time_ds = '20191211' ;

3、創建Json類型的外部表
(1)創建Json類型的外部表

CREATE EXTERNAL TABLE `student`( `student` map<string,string> COMMENT 'from deserializer', `class` map<string,string> COMMENT 'from deserializer', `teacher` map<string,string> COMMENT 'from deserializer') COMMENT '學生課程信息' ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' STORED AS TEXTFILE LOCATION 'oss://oss-cn-beijing-internal.aliyuncs.com/oss-huabei2/jianwei/student'

(2)在對應的OSS控制臺bucket上傳Json文件數據。
(3)查詢外部表的數據
報錯信息如下所示:

解決辦法:需要設置開啟hive兼容的flag。

set odps.sql.hive.compatible=true;

重新查詢數據即可正確返回Json數據。

以下是在Hive中查詢的數據,可以看到這兩處數據是一致的。

4、創建CSV格式的外部表
(1)創建CSV格式的外部表

建表語句示例如下: CREATE EXTERNAL TABLE IF NOT EXISTS fc_csv ( vehicleId string, recordId string, patientId string, calls string, locationLatitute string, locationLongtitue string, recordTime string, direction string ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES('separatorChar'=',') STORED AS TEXTFILE LOCATION 'oss://oss-cn-beijing-internal.aliyuncs.com/oss-huabei2/jianwei/fc_csv';

(2)查詢數據

set odps.sql.hive.compatible=true; select * from fc_csv;

不加Hive兼容的flag設置會發現有如下報錯信息:

FAILED: ODPS-0123131:User defined function exception - internal error - Fatal Error Happended



5、創建壓縮格式的外部表
創建外部表時列分隔符需要使用field.delim。選擇delimiter會報錯或數據沒有按照預期的分割符去分割。以下分別按照兩種方式去創建外部表。
需要設置以下說明的屬性flag。

(1)創建外部表

a.列分隔符定義為:delimiterdrop TABLE if exists oss_gzip; CREATE EXTERNAL TABLE IF NOT EXISTS `oss_gzip` ( `userid` string, `job` string, `education` string, `region` string ) PARTITIONED BY (dt STRING COMMENT '日期') ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' WITH SERDEPROPERTIES ( 'delimiter'='\t', 'odps.text.option.gzip.input.enabled'='true', 'odps.text.option.gzip.output.enabled'='true' ) STORED AS TEXTFILE LOCATION 'oss://oss-cn-beijing-internal.aliyuncs.com/oss-huabei2/jianwei/gzipfile/';

查詢數據的時候會發現數據并沒有按照我們的分隔符去進行分割,如下圖所示:

b.列分隔符定義為:field.delimdrop TABLE if exists oss_gzip2; CREATE EXTERNAL TABLE IF NOT EXISTS `oss_gzip2` ( `userid` string, `job` string, `education` string, `region` string ) PARTITIONED BY (dt STRING COMMENT '日期') ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' WITH SERDEPROPERTIES ( 'field.delim'='\t', 'odps.text.option.gzip.input.enabled'='true', 'odps.text.option.gzip.output.enabled'='true' ) STORED AS TEXTFILE LOCATION 'oss://oss-cn-beijing-internal.aliyuncs.com/oss-huabei2/jianwei/gzipfile/';


注意:在進行列分隔符定義時使用field.delim,不可以使用delimiter

6、創建存在新數據類型的外部表
當外部表創建字段涉及新數據類型時,需要開啟新類型flag。

set odps.sql.type.system.odps2=true;

否則會報如下錯誤:

set odps.sql.type.system.odps2=true ; drop TABLE if exists oss_gzip3; CREATE EXTERNAL TABLE IF NOT EXISTS `oss_gzip3` ( `userid` FLOAT , `job` string, `education` string, `region` VARCHAR(20) ) PARTITIONED BY (dt STRING COMMENT '日期') ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' WITH SERDEPROPERTIES ( 'field.delim'='\t', 'odps.text.option.gzip.input.enabled'='true', 'odps.text.option.gzip.output.enabled'='true' ) STORED AS TEXTFILE LOCATION 'oss://oss-cn-beijing-internal.aliyuncs.com/oss-huabei2/jianwei/flag_file/';添加對應的分區: alter table oss_gzip3 add if NOT EXISTS partition(dt='20191224');查詢數據: select * from oss_gzip3 where dt='20191224';

四、利用Information Schema元數據查看project、table的操作行為以及費用計算
1、主賬號安裝package
開始使用前,需要以Project Owner身份安裝Information Schema的權限包,獲得訪問本項目元數據的權限。
以下錯誤是沒有安裝對應的Information Schema的權限包和子賬號沒有相關的權限

安裝Information Schema的權限包方式有如下兩種:
(1)在MaxCompute命令行工具(odpscmd)中執行如下命令。

odps@myproject1>install package information_schema.systables;

(2)在DataWorks中的數據開發 > 臨時查詢中執行如下語句。

install package information_schema.systables;

2、給子賬號授權

grant read on package information_schema.systables to role worker;

3、查詢元數據信息

select * from information_schema.tasks_history limit 20;


TASKS_HISTORY字段列信息如下:


4、通過 TASKS_HISTORY 計算SQL費用
SQL任務按量計費:您每執行一條SQL作業,MaxCompute將根據該作業的輸入數據及該SQL的復雜度進行計費。該費用在SQL執行完成后產生,并在第二天做一次性的計費結算。

開發者版SQL計算任務的計費公式為: 一次SQL計算費用 = 計算輸入數據量 * 單價(0.15元/GB)標準版SQL計算任務的計費公式為: 一次SQL計算費用 = 計算輸入數據量 * SQL復雜度 * 單價(0.3元/GB)按量付費一次SQL計算費用 = 計算輸入數據量 * SQL復雜度 * 單價(0.3元/GB)

計算輸入數據量:指一條SQL語句實際掃描的數據量,大部分的SQL語句有分區過濾和列裁剪,所以一般情況下這個值會遠小于源表數據大小。
在 information_schema.tasks_history中字段input_bytes為實際掃描的數據量也就是我們的計算輸入數據量。字段complexity為sql復雜度。所以我們可以根據以下公式來計算SQL費用。

一次SQL計算費用 = input_bytes * complexity * 單價(0.3元/GB)

歡迎加入“MaxCompute開發者社區2群”,點擊鏈接MaxCompute開發者社區2群申請加入或掃描以下二維碼加入。

原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。

總結

以上是生活随笔為你收集整理的大数据上云第一课:MaxCompute授权和外表操作躲坑指南的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。