Create Table Like Mapping: 基于类型推断的建表方法

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: ![create-table-like-mapping.png](https://ata2-img.cn-hangzhou.oss-pub.aliyun-inc.com/1e60369b1873a7a1c3b358a3194cd3db.png) [Data Lake Analytics](https://www.aliyun.com/product/datalakeanalytics) 作为云上

create-table-like-mapping.png
Data Lake Analytics 作为云上数据处理的枢纽,最近加入了一种创新型的、基于类型推断的建表语法,能够帮助用户大大减少建表的工作量,今天带你来体验一下。

Create Table Like Mapping 语法简介

我们通常的建表语句是要求你填写好所有的字段信息的,比如在DLA里面建一个底层映射到 MongoDB 的表的语法是这样的:

create external table person (
    id int,
    title varchar(127),
    age int,
    create_time timestamp
);

这里字段比较少可能还不觉得什么,实际业务里面表的字段往往都是几十上百个字段,让用户手动敲这么多字段定义是非常耗时的。而有了Create Table Like Mapping的语法,这个工作量可以大大减少, 它的语法如下:

create external table dla_table like mapping('underlying_data_source_table');

注意这里的最后的 mapping('underlying_data_source_table') , 这里表示的是我们要推断的表是来源于底层 MongoDB/MySQL 等等的,而不是一个DLA的表。下面我们以 MongoDB 为例来实际使用一下这个功能。

Create Table Like Mapping + MongoDB

首先我们在DLA里面创建一个映射到 MongoDB 的库:

CREATE DATABASE `mongo_test`
WITH DBPROPERTIES (
    catalog = 'mongodb',
    location = 'mongodb://<your-user-name>:<your-password>@dds-bp1694axxxxxxxx.mongodb.rds.aliyuncs.com:3717,dds-bp1694ayyyyyyyy.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=zzzzz',
    database = 'mongo_test',
    vpc_id = 'vpc-aaaaaaa'
);

关于如何在DLA里面使用MongoDB的详情可以参见: 使用Data Lake Analytics读/写MongoDB数据

假设我们的 MongoDB 数据库里面有一个名字叫 person 的 collection, 它里面的数据长这样:

{
  "_id": "ObjectId("5c134c3f36d9cf6ad7077043")"
  "id": 1
  "name": "james"
  "age": 10
  "create_time": "ISODate("2018-12-14T06:22:54.369Z")"
}

那么我们现在要建一个DLA映射表用下面的语句:

create external table person like mapping('person');

在这条语句的背后,我们DLA的引擎会自动去MongoDB里面捞一条样例数据,然后对样例数据里面的字段、字段的类型进行分析,然后自动产生对应的建表语句,创建相应的表:

mysql> create external table person like mapping('person');
Query OK, 0 rows affected (1.01 sec)

mysql> desc person;
+-------------+-----------+-----------------+
| Field       | Type      | Collation       |
+-------------+-----------+-----------------+
| age         | double    | utf8_general_ci |
| create_time | timestamp | utf8_general_ci |
| id          | double    | utf8_general_ci |
| name        | varchar   | utf8_general_ci |
+-------------+-----------+-----------------+
4 rows in set (0.02 sec)

这里为了简洁美观,省略了部分字段。

然后我们就可以通过DLA的 person 表对底层MongoDB里面的数据进行查询了:

mysql> select * from person limit 4;
+------+-------------------------+------+-------+
| age  | create_time             | id   | name  |
+------+-------------------------+------+-------+
| 10.0 | 2018-12-14 14:22:54.369 |  1.0 | james |
| 20.0 | 2018-12-14 14:23:48.527 |  2.0 | bond  |
| 30.0 | 2018-12-14 14:23:48.962 |  3.0 | lily  |
| 20.0 | 2018-12-14 14:23:49.396 |  4.0 | lucy  |
+------+-------------------------+------+-------+
15 rows in set (2.17 sec)

这里我们展示了使用 create table like mapping 进行MongoDB的表的创建,DLA对于其它的存储比如MySQL, SQLServer, Postgres也都支持这个功能。

Create Table Like DLA table

上面我们介绍的都是创建跟底层存储结构一样的表结构,传统数据库其实还支持把一个表的结构复制一份,然后起一个新名字的create table like 语法,我们其实也是支持的,它的语法如下:

create external dla_table_2 like dla_table_1;

还是以前面我们刚刚建好的DLA的表person为例:

mysql> create external table person_2 like person;
Query OK, 0 rows affected (0.20 sec)

mysql> select * from person_2 limit 1;
+------+-------------------------+------+-------+
| age  | create_time             | id   | name  |
+------+-------------------------+------+-------+
| 10.0 | 2018-12-14 14:22:54.369 |  1.0 | james |
+------+-------------------------+------+-------+
1 row in set (0.72 sec)

总结

基于类型推断的建表Create Table Like Mapping语法可以帮助用户大大简化表创建的工作量,目前支持的数据源有: MySQL, SQLServer, Postgres, MongoDB, PolarDB等等,后面我们会拓展到所有的数据源。

Happy DLAing!

目录
相关文章
|
12月前
|
存储 SQL 关系型数据库
MySQL批量添加数据并取外表的某个字段值
MySQL批量添加数据并取外表的某个字段值
203 1
|
算法 Java 决策智能
运筹优化工具库介绍(一)
运筹优化问题有时候极其复杂,我们可以使用运筹优化工具库帮助数学建模,解决复杂的最优化问题,本文介绍几个常见的运筹优化工具库。
1913 0
|
JSON JavaScript 前端开发
Ctfshow web入门 nodejs篇 web334-web344
Ctfshow web入门 nodejs篇 web334-web344
302 0
|
12月前
|
机器学习/深度学习 存储 人工智能
揭秘机器学习背后的神秘力量:如何高效收集数据,让AI更懂你?
【10月更文挑战第12天】在数据驱动的时代,机器学习广泛应用,从智能推荐到自动驾驶。本文以电商平台个性化推荐系统为例,探讨数据收集方法,包括明确数据需求、选择数据来源、编写代码自动化收集、数据清洗与预处理及特征工程,最终完成数据的训练集和测试集划分,为模型训练奠定基础。
291 3
|
12月前
|
人工智能 自然语言处理 安全
Gemini 人工智能:谷歌AI重磅来袭!好消息,国内可用
Gemini 是 Google 🧠 开发的革命性人工智能模型,旨在打造一个功能强大的多模态 AI 系统。
|
12月前
|
SQL 存储 关系型数据库
SQL默认索引是什么
在SQL数据库中,索引是一种用于提高查询性能的数据结构
|
消息中间件 canal 缓存
Redis与MySQL双写一致性如何保证:延迟双删?binlog异步删除?
Redis与MySQL双写一致性如何保证:延迟双删?binlog异步删除?
|
JSON Prometheus Kubernetes
k8s小工具之kubectl-mytop插件
Kubectl-mytop是一个基于metrics-server组件做指标展示的命令行工具,综合kubectl top以及kubectl describe的展示能力,可以提供Kubernetes集群中node以及pod资源请求、资源限制、资源利用率、以及pod数量做排序展示。Kubectl-mytop插件的目的在于弥补当前常用k8s监控工具的不足,便于如资源不均,调度不均,使用率不均等问题的分析定位。如指定node后,可以查看这个node上所有的pod的request,limit,util资源使用等信息并排序输出,支持指定不同namespace的相同的pod label的资源展示,以及过滤指定
483 0
|
监控 API 数据处理
小红书商品详情API:电商助力
随着互联网的普及和电商行业的快速发展,消费者对于商品信息的获取方式也在不断变化。小红书作为一款以内容分享为主的社交电商平台,吸引了大量用户。为了满足用户对商品信息的快速获取需求,小红书提供了商品详情API接口。本文将探讨获得小红书商品详情API在电商行业中的重要性,以及如何通过实时数据获取提高业务效率。
|
前端开发 JavaScript 算法
【毕业设计之python系列】基于Flask的在线音乐网设计与实现
【毕业设计之python系列】基于Flask的在线音乐网设计与实现
954 1