ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

MaxCompute问答整理之12月

2020-01-09 15:56:34  阅读:331  来源: 互联网

标签:12 help 分区 MaxCompute detail DATETIME SQL 问答


问题一、MaxCompute内建日期函数,DATEPART函数命令格式为 bigint datepart(datetime date, string datepart)用于提取日期date中指定的时间单位datepart的值。DATETIME类型。如果输入为STRING类型会隐式转换为DATETIME类型后参与运算,其它类型抛异常。但是客户在使用函数的时候没有实现STRING类型隐式转换为DATETIME。报错信息:FAILED:ODPS-0130121:[1,50] Invalid type STRING of argument 1 for function datepart, expect DATETIME。如何解决?

打开新类型odps.sql.type.system.odps2=true时某些隐式类型转换会被禁用,包括STRING->BIGINT,STRING->DATETIME,DOUBLE->BIGINT,DECIMAL->DOUBLE,DECIMAL->BIGINT都是有精度损失或者报错的风险。这种情况可以通过cast函数做强制转换的方式来解决或者关掉新类型flag。
例如:select datepart(cast('2019-12-02 00:00:30' as datetime),'yyyy');

set odps.sql.type.system.odps2=false

问题二:MaxCompute中的数据通道Datahub 和 Tunnel 应用场景的区别是什么?

Datahub是阿里云上的实时消息队列服务,与MaxCompute紧密集成。用户可以将实时数据写入Datahub的topic,并通过Datahub的投递策略,定期将数据投递到MaxComptue表,满足实时数据准实时写入MaxCompute的需要。 
Tunnel 用于批量上传数据到离线表里,适用于离线计算的场景。

可参考文档了解更多:https://help.aliyun.com/document_detail/51656.html

问题三:MaxCompute表如何设置自增序列?

可以使用ROW_NUMBER函数去实现。例如:select ROW_NUMBER() OVER(),* from tablename;
可参考文档:https://help.aliyun.com/document_detail/34994.html

问题四:如何使用MaxCompute Java SDK设置SQL的Flag?

使用DataWorks或MaxCompute Console提交SQL时,通常需要设置SQL的Flag。如果需要使用MaxCompute新数据类型,通过Session级别方式开启,则需要在涉及新数据类型的SQL前加Set Flag语句:set odps.sql.type.system.odps2=true;。 使用SDK提交SQL时,不能简单地把Set Flag语句直接放到SQL Query中执行。以Java SDK为例,设置Flag的正确方式如下。

 

问题五:MaxCompute SQL中运行分区表全表扫描后,为什么会费用增加?

全表扫描费用增加是因为输入量增加了,例如有一张表按时间(天)分区,存放了365个分区(365天)数据,全表扫描则输入量为365个分区的数据量,如果用分区裁剪只取某个分区(某天)数据,则输入量就只有那个分区的数据量。

问题六:MaxCompute中,select * from sale_detail order by region; 报错:Semantic analysis exception-ORDER BY must be used with a LIMET clause

ORDER BY 必须与limit共同使用。ORDER BY没有与limit共同使用时,报错返回。
可参考文档:https://help.aliyun.com/document_detail/73777.html

问题七:在 MaxCompute 中,一张表的分区的数量是否越多越好?

在 MaxCompute 中,一张表最多允许有 60000 个分区,同时每个分区的容量没有上限。但是分区数量过多,会导致统计和分析过程非常不方便。
MaxCompute 也会限制单个作业中最多不能超过一定数量的 instance,而作业中的 instance 和您输入的数据量和分区数量密切相关的。所以您需要根据业务需要,选择合适的分区策略。

问题八:如果一开始并没有分区字段,是否可以增加或更改分区?

您不可以在源表上直接增加或更改分区键,分区键一旦创建就不能更改。但您可以重新创建一张分区表,使用动态分区SQL把源表数据导入到新分区表。
可参考文档:https://help.aliyun.com/document_detail/73779.html

问题九:如何查看MaxCompute数据量?

1、针对全表,查看物理空间,您可以使用desc命令
2、如果要查看表的数据条数,需要使用SQL。例如select count() as cnt from iris;

问题十:在MaxCompute中,需要将一行转化为多行的时候,我们该如何解决?

Lateral View和split,explode等UDTF一起使用,它能够将一行数据拆成多行数据,并在此基础上对拆分后的数据进行聚合。
可参考文档:https://help.aliyun.com/document_detail/87722.html

 

本文作者:亢海鹏

原文链接

本文为阿里云内容,未经允许不得转载。

标签:12,help,分区,MaxCompute,detail,DATETIME,SQL,问答
来源: https://www.cnblogs.com/zhaowei121/p/12171866.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有