外来数据包装是一项高级PostgreSQL功能。它们允许您将远程数据库链接到PostgreSQL,并将其表示为一组行为类似于普通表的外部表。
想象一下能够在MongoDB集合上运行SQL或从PostgreSQL实例查询MySQL数据。或者,设想在SQLite文件和Oracle集群之间运行联接,而不必编写和维护ETL作业。
在本文中,我们将讨论PostgreSQL外来数据包装器,以及Splitgraph如何使任何人都更容易使用它们。
此示例(GitHub上的源代码)将向您展示如何使用Multicorn编写自定义外部数据包装器。Multicorn是一个PostgreSQL扩展,它使得用Python编写外来数据包装器成为可能。
然后,我们将把它与Splitgraph的sgr mount命令集成在一起。这将使其可从拆分图引擎进行查询,并允许拆分图在拆分文件中使用它。
特别是,我们将运行查询Firebase Hacker News API的外来数据包装器。这将允许我们在Hacker News的顶部、最佳和新故事上运行SQL查询,以及显示HN和询问HN。
此外部数据包装器在不执行任何筛选的情况下从远程数据库返回行列表。但是,Multicorn还将限定符和排序键传递给Python扩展。这也允许在远程数据库上进行过滤(如果它支持的话)。
外来数据包装器的源代码位于src/hn_fdw/fdw.py中。向Splitgraph公开它的挂载处理程序位于src/hn_fdw/mount t.py中。
启动外壳并初始化引擎。这还将构建并启动引擎容器:
$docker-compose run--rm sgr$sgr init正在初始化引擎PostgresEngine local(sgr@engine:5432/plitgraph).数据库拆分图已存在,跳过确保拆分图_META处的元数据架构存在.运行拆分图_META--0.0.1.sql运行拆分图_META--0.0.1--0.0.2.sql运行拆分图_META--0.0.2--0.0.3.sql运行拆分图_META--0.0.2--0.0.3.sql运行拆分图_meta--0.0.2--0.0.3.sql运行拆分图_meta--0.0.2--0.0.3.sql。
$sgr mount hackernews--帮助用法:SGR mount hackernews[options]schema使用Firebase API装载黑客新闻故事数据集。选项:-c,--连接文本连接字符串,格式为username:password@server:port-o,--handler-options text JSON-编码的处理程序字典选项:Endpoint:要装载的Firebase端点列表,装载到与端点名称相同的表中。支持的端点:{TOP,NEW,BEST,ASK,SHOW,JOB}故事。--帮助显示此消息并退出。
现在,实际上挂载数据集。这将创建一系列外部表。当PostgreSQL客户端查询这些表时,外部数据包装器会将查询转发到Firebase API:
$sgr sql-s hackernews";从热门故事中选择id、标题、URL、分数23648942亚马逊支付10亿美元以上购买Zoox https://www.axios.com/report-amazon-to-pay-1-billion-for-self-driving-tech-firm-zoox-719d293b-3799-4315-a573-a226a58bb004.html 55 23646158当您在Safari中键入realty.com时,它会将您带到realtor.com https://www.facebook.com/story.php?story_fbid=10157161487396994&;ID=501751993 65323648864将食谱网站变成纯文本https://plainoldrecipe.com/3023644253奥林巴斯在84年后退出相机业务https://www.bbc.com/news/technology-53165293 54823648217波士顿禁止使用面部识别技术https://www.wbur.org/news/2020/06/23/boston-facial-recognition-ban 5123646953 Curl WTR.在https://github.com/chubin/wttr.in 19023646164中,Quora Go永久远程-First https://twitter.com/adamdangelo/status/1276210618786168833 26723646395矮人堡垒创建者解释其复杂性和起源[。视频]https://www.youtube.com/watch?v=VAhHkJQ3KgY 15223645305被贝宝黑名单,SCI-Hub切换到比特币https://www.coindesk.com/blackballed-by-paypal-scientific-paper-pirate-takes-bitcoin-donations 47923646028橡子阿基米德是第一个使用ARM架构https://spectrum.ieee.org/tech-talk/consumer-electronics/gadgets/why-wait-for-apple-try-out-the-original-arm-desktop-experience-today-with-a-raspberry-pi 111的台式机。
PostgreSQL处理实际的查询规划和过滤。外来数据包装器的工作是从API获取记录。此设置支持任何SQL语法:
$sgr sql-s hackernews";从ShowStories中选择id、标题、url、分数按分数排序DESC限制5";23643096展示HN:Aviary.sh-可供选择的https://github.com/team-video/aviary.sh 23523626167展示HN:HN Deck-浏览黑客新闻https://hndeck.sagunshrestha.com/11023640069的另一种方式展示HN:资源丰富-众包最好的公开Google Docs https://sourceful.co.uk 10223627066展示HN:拆分图-构建数据并与postgres共享数据,灵感来自docker/Git http://www.splitgraph.com 7923629125展示HN:DETA-用于构建和部署应用程序的云平台https://www.deta.sh/78。
描述外来数据包装器最简单的方法是考虑UNIX文件。UNIX文件并不总是指向磁盘上的本地文件。它可以是存储在NFS上的文件,可以存储在远程S3存储桶中,甚至可以是允许您操作机器上的设备的填隙程序。
在UNIX中,文件是一个非常强的抽象,不会被破坏。IDE不需要知道它正在编辑的文件是否在远程文件系统上。它可以通过发出相同的普通读写调用来使用它。编写新文件系统的人不需要确保它与所有现有工具兼容。相反,他们可以编写将文件系统挂载到挂载点的驱动程序。
PostgreSQL FDW在这方面类似于挂载。外表的行为大多与普通表一样,可以接收相同的SELECT/INSERT/UPDATE/DELETE查询。在幕后,包装器唯一的工作就是发出元组。
外国数据包装器是ETL的一个很好的替代方案。您可以挂载远程数据库并按需查询,而不是将可能永远不会使用的数据加载到您的仓库中。
因为它们与PostgreSQL查询规划器集成,所以FDW具有不错的性能。FDW可以将限定符甚至聚合下推到远程数据库。FDW可以报告开始扫描并将元组取回给查询规划器的大致成本。例如,这让查询规划者选择运行多个小的单个扫描还是运行一个大的扫描是满足连接的更好策略。
编写您自己的FDW非常简单,PostgreSQL文档对此进行了广泛的介绍。在表中返回Hello,World的hello-world FDW只有几百行C代码。如果您更喜欢关注开发简单性,您可以使用Multicorn而不是原始的C。
有很多开源的外国数据包装器可用。它们允许您查询其他RDBMS、NoSQL数据库、CSV文件或列存储。PostgreSQL维基列出了其中的一些。
通过对数据库或数据源使用外来数据包装器,您可以访问使用PostgreSQL的庞大软件生态系统。我们几乎可以称之为网络效应。可以通过FDW访问的新数据源增强了PostgreSQL的所有功能。
外国数据包装器是Splitgraph旨在让数据工程师和数据科学家更轻松工作的方式之一。
Splitgraph的sgr mount命令处理有关FDW初始化的样板。此命令使用外部表在引擎上创建架构。任何工具(如DataGlip/Metabase/DBT)都可以查询它们。使用SGR IMPORT,您可以将它们快照到拆分图图像中。最后,您可以使用拆分文件构建派生自装载的数据库的可复制数据集。
我们附带了几个开源的FDW,以及几个我们自己的FDW。
postgres_fdw、mysql_fdw和mongo_fdw允许您直接从Splitgraph访问远程数据库。cstore_fdw是一个列式存储扩展,Splitgraph本身使用它来存储数据。
我们还有一个Multiticorn分支,我们对其进行了修改,以加快分层查询的速度。这使您可以查询任何远程拆分图数据集,而无需将其检出或完全下载。与任何其他外国数据包装器一样,现有工具不知道正在发生这种情况。
最近,我们为苏格拉塔开放数据平台编写了一个外来数据包装器。它允许您从SQL客户端浏览任何Scrata域,甚至可以在Splitfiles中使用Scrata数据集。
我们在我们的目录中索引了40000多个苏格拉塔数据集。每一个都可以立即从拆分图引擎中进行查询。
外来数据包装器是一个强大的功能,可以提供ETL作业的替代方案。Splitgraph对外来数据包装器有一流的支持,这使得任何人都可以更容易地使用它们。
如果您有兴趣了解更多关于Splitgraph的信息,您可以查看我们的常见问题部分,遵循我们的快速入门指南或访问我们的网站。