精彩视频回顾请点击:MaxCompute Information Schema 详解
以下为精彩视频内容整理:
1.Information Schema简介;
2.Information Schema安装使用;
3.Information Schema常用场景;
4.Information Schema使用建议。
一、Information Schema简介
(一)背景
MaxCompute是一种快速、完全托管的PB/EB级数据仓库解决方案。用户结构化的数据在MaxCompute中以行-列表的的形式存储,每天有千万级别的作业对这些表进行操作,同时有丰富完整的权限控制体系对这些资源访问进行约束控制。为了满足这些海量对象以及对象之间关系的管理、分析需求,MaxCompute提供了开放的元数据服务Information Schema。通过Information Schema用户可以对MaxCompute中管理的对象使用SQL进行全局分析,可以分析用户数据访问行为等,也可以利用这些数据构建自己的内部的元数据管理系统。
MaxCompute的Information Schema提供了项目元数据及使用历史数据等信息。在ANSI SQL-92的Information Schema基础上,添加了面向MaxCompute服务特有的字段及视图。包含了22张视图,其中20张是基础对象及对象关系视图,2张是历史记录数据。
(二)数据产出
产出方式周期性离线+实时在线结合的方式进行数据产出。产出流程涉及多个系统,数据是存储在ODPS系统上确保数据可靠性。通过ODPS package+view的机制提供给用户,视图是project级别的。information schema数据安全依托ODPS已有的成熟安全机制。数据覆盖面广,对象关系进行展开,使用方便简单。
(三)Package+View机制
(1)什么是view
基于 SQL 语句的结果集的可视化的表,包含行和列就像一个真实的表。通过视图我们可以向用户选择性、稳定地提供数据,隐藏复杂的实现细节。
(2)什么是PACKAGE
Package是一种跨项目空间共享数据及资源的机制,我们可以把资源放到package中打包一起共享给其他project使用,相当于功能包。
(3)为什么要用PACKAGE
第一,共享简单,管理方便。不需要逐张view进行授权,后续对InformationSchema内容不需要额外授权操作。第二,安全,不需要管理庞大的用户,只需要对project进行授权。只需要授权project安装后,由project owner管理project内部谁能访问。
(四)视图信息
在上文中提到,InformationSchema包含了22张视图,其中20张是基础对象及对象关系视图,2张是历史记录数据。如下图所示,列出了这22张表,它们大概可以分为四类,其中只有历史数据表是带有分区字段ds,其他都为非分区表。
二、Information Schema安装使用
(一)安装
使用odpscmd或者DataWorks,注意需要PROJECT OWNER/SUPER ADMIN权限的执行。
如果需要project里面其他非project owner、super admin能使用information schema,可以通过ACL或者policy授权。
第一次使用时候由于字段不对,类型不对或者没有目标表权限等等会出现类似如下错误。
FAILED: No 'Read' permission for entity 'projects/information_schema/registration/functions/udf_unixtime2str': Authorization Failed [4002], You don't exist in project information_schema. Context ID:353dbeb8-9798-4a3f-8c9f-c5aa0faed66f. --->Tips: CurrentProject:lightning; Pricipal:ALIYUN$shujia_demo@aliyun-inner.com; No permission 'odps:Read' on resouce acs:odps:*:projects/information_schema/registration/functions/udf_unixtime2str
从query可能看不出来什么,有时候用户就是insert overwrite table xxx select * from information_schema.tasks_history。
Q:为什么只是访问information_schema所有表出错?
A:因为部分视图使用了udf,也有用户部分表的schema是对的,比如只有history表带有分区ds字段,其他表是没有的。
(二)使用限制
(1)Information Schema提供的是当前项目的元数据视图,不支持跨项目的元数据访问。如果需要对多个项目的元数据进行统一查询、分析,需要分别获取各个项目中的元数据并整合在一起进行跨项目元数据分析。
(2)元数据系统表目前提供视图有一定时延,对元数据时效性要求较高的应用,建议使用SDK/CLI直接获取指定对象的元数据。
(3)历史数据视图目前只提供14天数据,其他数据为最近产出副本,如果需要长期分析,需要定期导出到用户空间。
(4)视图数据不支持tunnel等拷贝,需要执行odps sql。
三、InformationSchema常用场景
在上文中提到,InformationSchema包含了22张视图,下面对其中一部分视图的常用场景分别作介绍。
(一)TABLES、PARTITIONS
(二)TASKS_HISTORY
(三)TUNNELS_HISTORY
(四)其它常用场景
四、Information Schema使用建议
(一)禁止掉SQL 1.0回退set odps.sql.planner.mode=lot;
(二)adhoc查询历史表使用时候加上分区限制避免扫描所有的分区,如果是查询昨天以及之前的数据会更快,因为历史表是历史数据和当天实时数据的聚合,历史数据会定期进行range cluster,进行过滤时候扫描量更小。
(三)定期dump时候不要将时间刚刚好设置为0点,因为产出时间是有一定的延迟,可以考虑设置晚几十分钟。
(四)多个project数据时候可以通过设置二级分区(string ds, string project),每个项目insert overwrite到自己分区,查询时候可以通过指定ds查询主账号下project数据。
(五)尽量不要用select* , 类似insert into table xxxx select * from information_schema.tables,因为视图可能会在尾部进行字段扩展。
(六)使用权限表时候查询用户权限时候注意不要遗漏“all”,对应权限*,比如查询用户drop权限时候,过滤列表除了drop还要含有all。