apache beam 入门之beam-sql

2023-10-26

目录:apache beam 个人使用经验总结目录和入门指导(Java)

就像spark-sql 一样,apache beam也有beam-sql, 就是能够输入1张模拟数据表, 然后通过sql语句来实现计算。
举个例子,我们不希望在数据源端执行 select * from tableA left join talbeB on tableA.id = tableB.id where tableA.id < 10 这句话, 因为这样很占用数据源端的计算资源(尤其是hive这类数仓), 所以会希望把tableA和tableB的所有数据读入到自己的计算集群中,然后在beam里去执行这一句sql。

如何创建模拟表

首先要创建1个表的schema(模式),或者说叫做表结构。 beam的schema采用builder模式进行建立。

Schema tableASchema = Schema.builder()
.addInt32Field("id")
.addStringField("name")
.build();

接着同样用builder模式去创建1条表的行记录

Row row1 = Row.withSchema(tableASchema)
.addValue(1)
.addValue("tony")
.build();

注意addValue的时候, 要按照schma里添加字段的顺序和类型来添加数据, 不要添加错了。
我们多造几条数据

Row row2 = Row.withSchema(tableASchema)
.addValue(2)
.addValue("tom")
.build();

Row row3 = Row.withSchema(tableASchema)
.addValue(3)
.addValue("jack")
.build();

造好后,用Create进行模拟表的创建,主要不要遗漏setRowSchema,否则会无法识别编码。

PCollection<Row> pTableA = pipeline.apply(Create.of(row1, row2, row3))
.setRowSchema(tableASchema);

这时候在pipeline运行时,pTableA数据集里就会塞进3行记录,但是现在还差1个表名。因此需要把数据集pTable变成PCollectionTuple

PCollectionTuple tupleTableA = PCollectionTuple.of(new TupleTag<>("tableA"), pTableA);

这时候"tableA"这个名字就通过new TupleTag赋予了pTableA,此时tupleTableA可以理解为1张模拟表了。

执行beam-sql

执行beam-sql前,要先添加如下依赖:

<dependency>
<groupId>org.apache.beam</groupId>
<artifactId>beam-sdks-java-extensions-sql</artifactId>
<version>${beam.version}</version>
</dependency>

接着用SQLTransform这个sdk即可实现beam-sql

// 执行bema-sql
PCollection<Row> afterSelectTableA
= tupleTableA.apply(SqlTransform.query("select name from tableA where id <= 2"));

// 打印结果
afterSelectTableA.apply(ParDo.of(new PrintStrFn()));

pipeline.run().waitUntilFinish();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

apache beam 入门之beam-sql 的相关文章

随机推荐

  • 基于VS调试分析 + 堆栈观察问题代码段

    文章目录 问题代码段1 阶乘之和 问题代码段2 越界的危害 发现问题 分析问题 思考问题 堆栈原理 解决问题 DeBug与Release 程序员与测试人员 总结与提炼 问题代码段1 阶乘之和 先来看一道C语言中比较基础的题目 求解阶乘的和
  • java --向上转型和向下转型

    一 简述 Java 转型主要是用在继承和接口实现的场景 Java 转型可分为向上转型和向下转型 区别如下 向上转型 通过子类对象实例化父类对象 这属于自动转换 向下转型 通过父类对象实例化子类对象 这属于强制转换 只要记住一句话即可 父类引
  • JAVA 多态 从内存角度分析

    设父类对象占内存空间100M 子类对象占内存空间50M 问题 对象转型问题 为什么只有父类变量指向子类对象 因为父类需要100M 只能指向比自己更大的空间 父类变量指向子类对象时变量情况 a pa c cc 父类变量实际上指向的是 和 pc
  • Python Pytest装饰器@pytest.mark.parametrize详解

    转自 Python Pytest装饰器 pytest mark parametrize详解 Pytest中装饰器 pytest mark parametrize 参数名 list 可以实现测试用例参数化 类似DDT 如 pytest mar
  • http的异步请求

    需要用到的包 包版本应该可能不同 httpcore 4 1 4 jar httpsayncclient 4 0 alpha3 jar httpcore nio 4 2 alpha3 jar 异步http请求 author Old Zhang
  • ci分页查询ajax,解析CI的AJAX分页 另类实现方法_PHP教程

    看了一下CI的分页类没有写到关于AJAX的内容 也在论坛上看到其他几位大神写的分页类扩展 感觉其实是没有必要 在现有的基础上做了一下小小的改动还是能实现的 下面进入正题 CI的原生分页类中有一个参数 config anchor class
  • Whistle抓包之设置windows全局代理

    一 whistle官网教程 http wproxy org whistle install html 二 windows场景设置全局代理 因为博主在设置SwitchyOmega插件代理时 未生效 只能通过设置全局代理的方式解决 官网教程上又
  • 华为OD机试 - 机房布局(Java)

    题目描述 小明正在规划一个大型数据中心机房 为了使得机柜上的机器都能正常满负荷工作 需要确保在每个机柜边上至少要有一个电箱 为了简化题目 假设这个机房是一整排 M表示机柜 I表示间隔 请你返回这整排机柜 至少需要多少个电箱 如果无解请返回
  • Vue触底加载

    页面内的触底加载 需求 页面滚动到接近底部 再次发送请求 获取更多数据 渲染到页面上 data 请求页数 page 0 请求获取的数据 list 是否正在加载 用于节流 isLoading false created 首次调用 this g
  • 一篇文章教你,破解百度网盘加密文件,学会这个举一反二

    经常遇到百度网盘的压缩文件加密了 今天我们就破解它 实现思路 爆破密码的思路其实都大同小异 无非就是字典爆破 就看你是有现成密码字典 还是自己生成密码字典 然后进行循环输入密码 直到输入正确位置 现在很多都有防爆破限制 根本无法进行暴力破解
  • 代理模式详解

    第一节 代理模式介绍 1 什么是代理模式 代理 Proxy 是一种设计模式 提供了对目标对象另外的访问方式 即通过代理对象访问目标对象 这样做的好处是 可以在目标对象实现的基础上 增强额外的功能操作 即扩展目标对象的功能 代理模式分为静态代
  • 【翻译】疫苗正在拯救世界!但内容交付网络首先做到了吗?

    2020年1月 一种激进的公共卫生干预措施被介绍给世界 禁闭 在中国推出它之前 它从未在好莱坞以外的任何地方大规模使用过 没有人相信现实生活中的民众会接受连续几个月被关在家里的情况 即使他们的生命取决于此 与所有的预期相反 禁闭正在控制一种
  • 【VMD-DBO-LSTM】变分模态分解-蜣螂优化算法-长短时记忆神经网络研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 1 1 变分模态分解算法 1 2 蜣螂优化算法 1 3 LSTM 2 运行结果 3 参考文献 4 Pyth
  • 关于python3.9版本在anaconda创建好的环境中安装opencv库、skimage库、sklearn库解决方法,同样适用于python3.10

    目录 问题的由来 问题的检测 问题的解决 总结 文件附予 我是技术小白 但很愿意与大家分享相同的问题及解决的办法 有误望指点 问题的由来 在参与 图像去阴影 去噪 去雨滴 修复照片的技术研究 时 遇到了No module named 就如下
  • Qt实现十六进制接收文本和显示文本(可用于串口的十六进制)

    1 QTextEdit接收文本 QString str1 ui gt textEdit gt toPlainText QByteArray str2 QByteArray fromHex str1 toLatin1 data 按十六进制编码
  • VS Code 自动生成get-set方法

    在文档空白处右击 选择源代码操作 选择Generate Getters and Setters 选择要生成get set方法的属性 点击确定 生成成功
  • glTF格式介绍——目录

    最近因为科研需要 需要了解glTF文件结构 阅读了一下官方的文档 然后记录在这里写一个专栏吧 由于自己还是图形学小白 翻译的内容难免会有错误 希望大家见谅 此外 此专栏只翻译了主要部分 动画 蒙皮 材质三个部分因为个人知识的限制 暂时没有翻
  • Nas里搭建Frpc内网穿透客户端【超级无脑】

    接上篇 Linux搭建Frps内网穿透服务器端 搭建了一个Frps的服务端 建议也可以先去看下 这篇文章分享如何在群晖Nas里面搭建一个客户端 成功后 可以在远程把资料同步到自己的nas上 实现与百度网盘类似功能 又省去一笔 同时 用这种方
  • 图解Python,14张思维导图让你玩转Python

    Python的设计理念是 优雅 明确 简单 优雅 Python常被称为胶水语言 能够把用其他语言制作的各种模块很轻松地联结在一起 明确 Python运行速度非常快 用Python语言编写程序时 无需考虑诸如如何管理你的程序使用的内存一类的底
  • apache beam 入门之beam-sql

    目录 apache beam 个人使用经验总结目录和入门指导 Java 就像spark sql 一样 apache beam也有beam sql 就是能够输入1张模拟数据表 然后通过sql语句来实现计算 举个例子 我们不希望在数据源端执行