运用马克斯Compute访谈TableStore(OTS) 简明手册

主要编辑:

SELECT*fromsales_detailwheredsin(selectdtfromsales_date);

UDTF

  • Hive中UDTF编写和应用

//
大家选出来1行数量,并将name/name传入UDF,再次回到多个string的丰裕

正文为云栖社区原创内容,未经允许不得转发。回去乐乎,查看越来越多

此文中运用马克斯Compute Studio作体现,首先,安装MaxCompute
Studio,导入测量试验马克斯Compute项目,创立工程,建设构造二个新的马克斯Compute脚本文件, 如下

Hive中的TRANSFORM:自定义Mapper和Reducer完成Map/Reduce

/**
 * Mapper.
 */
public interface Mapper {
  /**
   * Maps a single row into an intermediate rows.
   * 
   * @param record
   *          input record
   * @param output
   *          collect mapped rows.
   * @throws Exception
   *           on error
   */
  void map(String[] record, Output output) throws Exception;
}

能够将一列拆分为多列

动用样例:

public class ExecuteMap {

    private static final String FULL_PATH_CLASS = "com.***.dpop.ods.mr.impl.";

    private static final Map<String, Mapper> mappers = new HashMap<String, Mapper>();

    public static void main(String[] args) throws Exception {
        if (args.length < 1) {
            throw new Exception("Process class must be given");
        }

        new GenericMR().map(System.in, System.out,
                getMapper(args[0], Arrays.copyOfRange(args, 1, args.length)));
    }

    private static Mapper getMapper(String parserClass, String[] args)
            throws ClassNotFoundException {
        if (mappers.containsKey(parserClass)) {
            return mappers.get(parserClass);
        }

        Class[] classes = new Class[args.length];
        for (int i = 0; i < classes.length; ++i) {
            classes[i] = String.class;
        }
        try {
            Mapper mapper = (Mapper) Class.forName(FULL_PATH_CLASS + parserClass).getConstructor(classes).newInstance(args);
            mappers.put(parserClass, mapper);
            return mapper;
        } catch (ClassNotFoundException e) {
            throw new ClassNotFoundException("Unknown MapperClass:" + parserClass, e);
        } catch (Exception e) {
            throw new  ClassNotFoundException("Error Constructing processor", e);
        }

    }
}

MR_USING=" USING 'java -Xmx512m -Xms512m -cp ods-mr-1.0.jar:hive-contrib-2.3.33.jar com.***.dpop.ods.mr.api.ExecuteMap "

COMMAND="FROM dw_rtb.event_fact_adx_auction "
COMMAND="${COMMAND} INSERT overwrite TABLE dw_rtb.event_fact_mid_adx_auction_ad PARTITION(yymmdd=${CURRENT_DATE}) SELECT transform(search_id, print_time, pthread_id, ad_s) ${MR_USING} EventFactMidAdxAuctionAdMapper' as search_id, print_time, pthread_id, ad_s, ssp_id WHERE $INSERT_PARTITION and original = 'exinternal' "

latitude double,

标注

新萄京娱乐网址2492777 1

UDAF

  • Hive
    udaf开拓入门和平运动转进度详解
  • Hive通用型自定义聚合函数(UDAF)

涉嫌的数据表音讯如下:

理论上OpenMSportage的模子都足以映射到地点的总结进程。注意,使用map,reduce,select
transform那多少个语法其实语义是平等的,用哪个关键字,哪一种写法,不影响一直进程和结果。

2

Hive中的TRANSFORM:使用脚本完毕Map/Reduce

转自:
http://www.coder4.com/archives/4052

第一来看一下数额:

hive> select * from test;
OK
1       3
2       2
3       1

设若,大家要出口每一列的md5值。在此时此刻的hive中是绝非那一个udf的。

大家看一下Python的代码:

#!/home/tops/bin/python

import sys
import hashlib

for line in sys.stdin:
    line = line.strip()
    arr = line.split()
    md5_arr = []
    for a in arr:
        md5_arr.append(hashlib.md5(a).hexdigest())
    print "\t".join(md5_arr)

在Hive中,使用脚本,首先要将他们插手:

add file /xxxx/test.py

下一场,在调用时,使用TRANSFORM语法。

SELECT 
    TRANSFORM (col1, col2) 
    USING './test.py' 
    AS (new1, new2) 
FORM 
    test;

那边,我们应用了AS,钦命输出的几何个列,分别对应到哪个列名。借使省略那句,则Hive会将第四个tab前的结果作为key,前面别的作为value。

此间有一个小坑:偶然候,大家结合INSERT
OVERAV4WXC60ITE使用上述TRANSFORM,而指标表,其分割副只怕不是\t。可是请记住:TRANSFORM的分开符号,传入、传出脚本的,永世是\t。不要思考外面其余的剪切符号!

末尾,解释一下MAP、REDUCE。

在局地Hive语句中,大家也许拜见到SELECT MAP (…) USING ‘xx.py’那样的语法。

可是,在Hive中,MAP、REDUCE只但是是TRANSFORM的小名,Hive不保障一定会在map/reduce中调用脚本。看看官方文书档案是怎么说的:

Formally, MAP ... and REDUCE ... are syntactic transformations of SELECT TRANSFORM ( ... ). In other words, they serve as comments or notes to the reader of the query. BEWARE: Use of these keywords may be dangerous as (e.g.) typing "REDUCE" does not force a reduce phase to occur and typing "MAP" does not force a new map phase!

就此、混用map
reduce语法关键字,以致会挑起混淆,所以提出我们要么都用TRANSFORM吧。

友谊提示:假若脚本不是Python,而是awk、sed等系统内置命令,能够直接运用,而不用add
file。

假定表中有MAP,ATucsonRAY等复杂类型,怎么用TRANSFORM生成?

例如:

CREATE TABLE features
(
    id BIGINT,
    norm_features MAP<STRING, FLOAT> 
);

答案是,要在剧本的输出中,对相当字段遵照HDFS文件中的格式输出就可以。

例如,以地点的表结构为例,每行输出应该为:

1^Ifeature1^C1.0^Bfeature2^C2.0

其中I是tab键,这是TRANSFORM要求的分割符号。B和^C是Hive存储时MAP类型的KV分割符。

除此以外,在Hive的TRANSFORM语句的时候,要注意AS中增加项目评释:

SELECT TRANSFORM(stuff)
USING 'script'
AS (thing1 INT, thing2 MAP<STRING, FLOAT>)

利用 UDF(User Defined Function)管理数量

作者:隐林

再次回到左表中的数据,当join条件营造,也正是mytable第11中学某行的id在mytable2的持有id中冒出过,此行就保留在结果聚焦

Hive Python Streaming的原理及写法

http://www.tuicool.com/articles/vmumUjA

longitude double,

新萄京娱乐网址2492777 2

SELECT*FROMsrc1UNIONSELECT*FROMsrc2;

set odps.sql.ddl.odps2=true;

前段时间odps select transform完全协作了hive的语法、功用和行事,满含input/output row format 以及
reader/writer。Hive上的剧本,超过四分之二能够直接拿来运营,部分脚本只要求通过轻易改变就可以运转。其余我们有的是效用都用比hive越来越高施行作用的语言
(C++) 重构,用以优化品质。

亟待先写好FROM,再回头写SELECT列表,能力提示。如下

select vid,count(*),avg(speed),avg(oil_consumption) from
ots_vehicle_track where vid
<4 and gt<1469171387  group by
vid;

  1. 兴妖作怪造数据

SELECTDISTINCT*新萄京娱乐网址2492777,FROM(SELECT*FROMsrc1UNIONALLSELECT*FROMsrc2) t;

https_check=true

新萄京娱乐网址2492777 3

例如:

CREATE EXTERNAL TABLE IF NOT
EXISTS
ots_vehicle_track

此文中利用马克斯Compute Studio作展示,首先,安装MaxCompute
Studio,导入测量检验马克斯Compute项目,创制工程,创设叁个新的马克斯Compute脚本文件, 如下

SELECT*frommytable1whereexists(select*frommytable2whereid=
mytable1.id);`

‘tablestore.columns.mapping’=’:vid, :gt, longitude, latitude, distance, speed,
oil_consumption’, —
(3)

地点的口舌仅仅是把value原样输出,然而理解awk的客户,从此过上了写awk脚本不写sql的光阴

里面M1, M2,
M4四个遍布式职务分别对应相应八个输入表,双击M2能够见见中具体推行的DAG(在DAG中重复双击能够再次来到),如下

WITH SERDEPROPERTIES ( — (2)

  • SELECT TRANSFORM。

  • 场景1

  • 自个儿的连串要动员搬迁到马克斯Compute平台上,系统中原来有相当多职能是利用脚本来落成的,饱含python,shell,ruby等剧本。
    要迁移到马克斯Compute上,笔者急需把那一个本子全部都退换成UDF/UDAF/UDTF。更换进程不仅仅必要耗时人力,还索要做叁次又一回的测验,进而保险更换成的udf和原先的本子在逻辑上是等价的。小编梦想能有更简明的迁移情势。
  • 场景2
  • SQL比较专长的是集合操作,而自己索要做的事体要对一条数据做越多的精美的测算,现成的嵌入函数无法有益的完毕本人想要的职能,而UDF的框架非常不够利索,並且Java/Python作者都不太熟谙。相比之下我更专长写剧本。作者就目的在于能够写叁个本子,数据全都输入到本身的剧本里来,笔者要好来做各个总计,然后把结果输出。而马克斯Compute平台就担当帮本人把多少做好切分,让小编的本子能够分布式推行,负担数据的输入表和输出表的管理,肩负JOIN,UNION等关联操作就好了。

超越三分之二DBMS系统中,如MySQL,Hive等,UNION后要是有CLUSTE途睿欧 BY, DIST哈弗IBUTE
BY, SORT BY, OLANDDER
BY或许LIMIT子句,其服从于与前方全部UNION的结果,并不是UNION的末段一块。ODPS2.0在set
odps.sql.type.system.odps2=true;的时候,也使用此行为。举个例子:

set odps.task.major.version=2dot0_demo_flighting;

也许用map,reduce的主要字会让逻辑显得清楚一些

此意义主如若平价从其余数据库系统迁移,对于信用贷款买,大家依旧引入您使用JOIN,鲜明表暗指图

  1. FAILED: ODPS-00一千0:System internal error – fuxi
    job failed, WorkerPackageNotExist:供给设置set
    odps.task.major.version=unstructured_data
  2. FAILED: ODPS-0010000:System internal error –
    std::exception:Message: a timeout was
    reached:一般情状下是OTS的endpoint填写错误,导致ODPS没办法访问,能够咨询ots_support旺旺账号
  3. logview invalid
    end_point:在进行进程中,会再次来到一个logview
    U汉兰达L地址,假诺应用浏览器访谈该地址再次来到错误,恐怕是安插不对,请检查
    马克斯Compute 配置,并咨询 odps_support 旺旺账号

新澳门萄京娱乐场官网,地点用的是perl。那实质上不只是语言帮助的恢宏,一些简约的效应,awk,
python, perl, shell
都援助直接在命令里面写剧本,无需写脚本文件,上传资源等经过,开荒进程更简短。别的,由于当下大家总括集群上未有php和ruby,所以这两种脚本不帮衬。

马克斯Compute大大扩展了DML语句的援助,在易用性,包容性和质量方面,能够更好的满足你的须要。对于SQL相比熟练的学者会发掘,上述功用大多数是标准的SQL接济的作用。马克斯Compute会持续晋级与正式SQL和产业界常用产品的包容性。

奇迹顾客在报表存款和储蓄当中的数目有新鲜的组织,希望团结开销逻辑来管理每一行数据,比方剖判特定的json字符串,这一块的支付也曾经很有益了。

上次向你介绍了CTE,VALUES,SEMIJOIN,本篇向您介绍马克斯Compute对别的脚本语言的帮衬

返回

# this url is for odpscmd update

Select
transform允许sql客商钦定在服务器上施行一句shell命令,将上游数据各字段用tab分隔,每条记下一行,逐行输入shell命令的stdin,并从stdout读取数据作为出口,送到下游。Shell命令的实质是调用Unix的有的utility,因而得以运转别的的本子解释器。包涵python,java,php,awk,ruby等。

因为WHERE中包罗了OEvoque,导致无法转移为SEMI JOIN,会单独运维作业推行子查询

举个例子下边就是一个简短的 UDF
定义,只是轻便的将五个字符串连接。 马克斯Compute
扶助更目眩神摇的UDF,包罗自定义窗口进行逻辑等,详细请参谋MaxCompute Studio-开发
UDF。

地方的语句造出一份有50行的数据表,值是从1到50;
测验时候的多少就足以方便造出来了。功效类似轻易,但以前是odps的叁个痛点,未有实惠的艺术造数据,就不便于测量试验以及初学者的读书和探讨。当然那也得以通过udtf来贯彻,可是急需复杂的流水生产线:步入ide->写udtf->打包->add
jar/python->create function->执行->drop function->drop
resource。

书写顺序和实行顺序一致,就不便于混淆视听了。那样有七个额外的低价,在马克斯Compute
Studio中写SQL语句的时候,会有智能提示的效果,假诺是SELECT在前,书写select列表的表明式的时候,因为FROM还不曾写,马克斯Compute
Studio不可能知道也许拜望那一个列,也就不可能做提醒。如下

access_id=ODPS-AccessId

新萄京娱乐网址2492777 4

摘要: 马克斯Compute(原ODPS)是Ali云自主研究开发的全体产业界当先水平的布满式大额管理平台,
特别在集团内部获得普遍应用,支撑了三个BU的着力工作。
马克斯Compute除了不停优化质量外,也从事于进步SQL语言的客商体验和表明手艺,进步广大ODPS开拓者的生产力。

布满式NoSQL数据存款和储蓄服务,无缝帮忙单表PB级数据及百万级访谈出现,弹质量源,按量计费,对数据高频的增、删、改扶助的很好,有限支撑单行数据读写的强一致性。

新萄京娱乐网址2492777 5

搬迁一个原先在Oracle上边的ETL系统,发现用了 WHERE EXISTS( SELECT
…) 和 WHERE IN (SELECT
…) 那类的言语,可是发掘ODPS在那上头帮忙不完整,还要手工业将这么些半连接的说话调换为普通JOIN,再过滤。。。

假定网络堵塞,能够运用公网地址,TableStore原生援助 VPC
网络决定,也急需将互联网项目设置为 “允许私自互联网访谈”

或者

个中的ds假设是分区列,则select dt from
sales_date 会单独运维作业执行子查询,而不会转化为SEMIJOIN,试行后的结果会挨个与ds相比,sales_detail中ds值不在重临结果中的分区不会读取,保险分区裁剪还是有效。

广泛错误管理:

UDTF的优势:

则等效于

gt bigint,

新萄京娱乐网址2492777 6

对此在values中未有制定的列,可以见到取缺省值为NULL。插入列表功用不必然和VALUES一起用,对于INSERT
INTO … SELECT…, 同样能够运用。

)

上述功用能够动用SELECT TRANSFORM来兑现

场景3

景况希图

马克斯Compute(原ODPS)是Ali云自己作主研发的保有产业界抢先水平的布满式大数目管理平台,
特别在集团内部获得分布应用,支撑了多个BU的中坚工作。
马克斯Compute除了无休止优化质量外,也从事于升高SQL语言的顾客体验和表明技术,进步大范围ODPS开辟者的生产力。

正值开荒新项目,须要给三个小数码表计划些基本数据,可是没有INSERT …
VALUES
语句,无法把数据和创立表的DDL放在一同尊崇,只可以另用一些剧本,调用ODPS命令行准备数据。。。

写在最终

摘要:
马克斯Compute(原ODPS)是Ali云自己作主研究开发的全部业界当先水平的布满式大额管理平台,
特别在公司内部获得普及应用,支撑了八个BU的主导专业。
马克斯Compute除了不停优化品质外,也从事于进步SQL语言的客户体验和表明技术,提升广大ODPS开荒者的生产力。

SELECT*frommytable1 aLEFTSEMIJOINmytable2 bona.id=b.id;

 

6.
能源文件会被下载到奉行钦定命令的干活目录,能够使用文件接口张开./bar.txt文件。

比如mytable2中的全体id都不为NULL,则等效于

  • com.aliyun.odps.TableStoreStorageHandler 是 马克斯Compute
    内置的拍卖 TableStore 数据的 StorageHandler, 定义了 MaxCompute 和
    TableStore 的竞相,相关逻辑由 马克斯Compute 达成。
  • SEQashqaiDEPROPEEnclaveITES
    能够领略成提供参数选项的接口,在行使 TableStoreStorageHandler
    时,有五个必须内定的选项,分别是底下介绍的
    tablestore.columns.mapping 和 tablestore.table.name。
    愈来愈多的可选选项就要背后别的例子中提起。
  • tablestore.columns.mapping
    选项:必须选项,用来描述对须要 马克斯Compute 将探访的 TableStore
    表的列,包含主键和属性列。 那其中以 : 打头的用来表示 TableStore
    主键,比方这些例子中的 :vid:gt。 其余的均为属性列。
    TableStore援助最少1个,最多4个主键,主键类型为 bigint 或
    string,在这之中第二个主键为分区键。 在内定映射的时候,客商必需提供钦点TableStore 表的
    持有主键,对于属性列则并无需全体提供,可以只提供应和需要要通过
    马克斯Compute 来访谈的属性列。
  • tablestore.table.name:必要拜望的 TableStore 表名。
    借使钦命的 TableStore 表名错误(不设有),则会报错,马克斯Compute
    不会再接再砺去创制 TableStore 表。
  • LOCATION 用来钦命访谈的 TableStore 的实例音讯,满含instance 名字,endpoint 等。 
  • 数量格式对应,马克斯Compute 与 TableStore
    的数码格式对应如下:

新萄京娱乐网址2492777 7

想测验一个新写的UDF,只写SELECT
myudf(‘123’);会报错,还非得创设二个dual表,里面加一行数据,好艰辛。若是测验UDAF,还要在测验表里面准备多行数据,每一次测验分化的输入都要修改表内容仍旧成立新表,要是有个方法不用成立表也能例外的数据整合测量试验本身的UDF就好了。。。

小提示:由于 马克斯Compute 在 2.0
版本的持筹握算框架才具支持直接访问 TableStore
数据,该版本还在灰度上线中,近年来还必要 申请MaxCompute
2.0试用
,具体开通使用格局请参见 如何申请试用马克斯Compute
2.0。

  1. UDTF是有档期的顺序,而Transform的子进度基于stdin/stdout传输数据,全体数据都当做string管理,因而transform多了一步类型转变;
  2. Transform数据传输正视于操作系统的管道,而近年来管道的buffer独有4KB,且无法安装,
    transform读/写 空/满 的pipe会导致进度被挂起;
  3. UDTF的常量参数能够不用传输,而Transform无法利用这几个优化。

SELECT*frommytable1 aLEFTANTIJOINmytable2 bona.id=b.id;

日前ODPS-SQL访谈 TaleStore
还在对推行逻辑实行深度的优化,如若有供给请联系ots_support,大家将对准职业场景来拓宽优化。

小结

SELECTkey,max(value)FROMsrc tWHEREvalue>0GROUPBYkeyHAVINGsum(value)
>100ORDERBYkeyLIMIT100;

何以是大数目估测计算服务 MaxCompute?

先是弹 – 善用马克斯Compute编译器的荒谬和警戒

setodps.sql.type.system.odps2=true;SELECTexplode(array(1,3))AS(a)UNIONALLSELECTexplode(array(0,2,4))AS(a)ORDERBYaLIMIT3;

 

新萄京娱乐网址2492777 8

例如:

data_size_confirm=100.0

SELECT TRANSFORM 介绍

有个别时候表的列比很多,盘算数据的时候希望只插入部分列的数码,此时得以用插队列表功效

本篇作品就以三个小白客商的地方体验如何行使
马克斯Compute-SQL 查询表格存款和储蓄个中的数目,以及怎么样开辟自定义逻辑(User
Defined Function, UDF)来拍卖客户特定的数额格式。

新萄京娱乐网址2492777 9

selectabs(-1),length(‘abc’),getdate();

vid bigint,

网站地图xml地图