到目前为止,我已经参加了9 场黑客马拉松,其中一场是国际比赛,甚至在4 场比赛中获胜。话又说回来,当我的学弟 Dhruv 和 Tushar 告诉我关于 Golang Specific 的黑客马拉松时,我把 Harsh 也拉了过来,因为为什么不呢。不仅仅是 Harsh,我还拉了我们 Point Blank 团队的 40 个人一起参加,这最终让黑客马拉松变成了我们自己的内部竞赛,哈哈。
我们团队中的所有人GoGoingGone(lmao)都有使用 Golang 的良好经验,但我们想做的不仅仅是构建另一个工具。我们想要创新。就在那时,这个想法突然出现——让我们构建一种迷你语言来定义动态、可配置的数据管道。
我是 Akash Singh,来自班加罗尔的三年级工程专业学生和开源贡献者。
这是我的 LinkedIn、GitHub 和 Twitter
我在网上的名字是SkySingh04。
Fractal 最初是一种数据处理工具,用于从遗留系统(例如 SQL 数据库和 CSV 文件)无缝迁移到现代平台,例如 MongoDB 或 AWS S3。但我们想要的不仅仅是另一个 ETL 工具。我们的想法是使其高度灵活且用户友好,允许用户使用简单的声明性语法(一种迷你语言)定义验证和转换规则在工具内。
我们观察到数据管道空间中的大多数工具都依赖于严格的配置或自定义脚本。这种方法通常需要大量的编程专业知识,这限制了非开发人员的可访问性。声明性迷你语言提供:
这种迷你语言并不是要重新发明轮子,而是要提供一个抽象来简化数据转换和验证。
当这与简单的 yaml 文件配置相结合时,我们认为我们已经达到了目标,即创建一个易于配置的数据管道,可以大规模地将数据从一个源处理到另一个源。
我们将语法设计得简单而富有表现力,重点关注两个主要操作:
FIELD("age") TYPE(INT) RANGE(18, 65) FIELD("email") MATCHES(EMAIL_REGEX) FIELD("status") IN ("active", "inactive")
RENAME("old_field", "new_field") MAP("status", {"0": "inactive", "1": "active"}) ADD_FIELD("processed_at", CURRENT_TIME()) IF FIELD("age") > 50 THEN ADD_FIELD("senior_discount", TRUE)
这种抽象允许用户以最小的努力处理不同的数据集,从而提高生产力并降低复杂性。
在弄清楚如何制作这种语言的词法分析器和解析器的过程中,GoFr.dev 的团队带我们上楼参加了一次减压课程,其中充满了深夜的 sharayis 和即兴演奏!
黑客马拉松不仅仅是为了创建迷你语言。我们还必须建设周围的基础设施,确保分形:
我们将工作分为四个模块:
尽管我们在 GO for GOFR 黑客马拉松中表现出色,但我们在最终评估过程中面临着严峻的挑战。除了我们录制的演示之外,评委还要求进行现场演示,不幸的是,我们在现场运行期间遇到了解析器逻辑中的意外错误。考虑到在短短 24 小时内构建强大的自定义解析器的复杂性,这是一项雄心勃勃的开发功能,虽然我们录制的演示展示了其功能,但在时间限制下实现 100% 的准确性被证明是困难的。这个小问题最终让我们失去了最高奖项。然而,我们的努力仍然受到高度评价,我们团队清晰的愿景和引人注目的交付为我们赢得了“最佳推介”的荣誉,凸显了我们的潜力和独创性。
黑客马拉松通常是关于突破界限和探索未知领域。 Fractal 是我们重新定义数据处理工具工作方式的尝试——让它们变得可访问、模块化且对开发人员友好。
我找不到比这更志同道合的人与我一起工作了,毫无疑问,他们是绝对最好、最勤奋的队友。期待是什么让我参加下一次黑客马拉松,我敢说,基于 RUST 的黑客马拉松吗? xD
查看 GitHub 上的 Fractal
Fractal 是一个灵活的、可配置的数据处理工具,使用 GoFr 和 Golang 构建。 Fractal 旨在处理来自多个来源的数据摄取,应用强大的转换和验证,并将输出传递到广泛的目的地。借助 Fractal,您可以自动化复杂的数据工作流程,而无需管理低级细节 以下是在项目中设置新集成的文档:
自定义语法使用户能够:
可以为任何数据源或目的地编写规则,例如 JSON、YAML、CSV、SQL 数据库、消息代理,或云服务。
验证规则确保数据满足特定的质量和完整性要求。
推介材料:Drive Link
或者自己尝试一下,让我们知道您的想法!
以上是为什么我们为 Golang 黑客马拉松构建迷你语言的详细内容。更多信息请关注PHP中文网其他相关文章!