<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="en">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">Hybrid-Cloud SQL Federation System at Twitter</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Chunxu</forename><surname>Tang</surname></persName>
							<email>chunxut@twitter.com</email>
							<affiliation key="aff0">
								<orgName type="institution">Twitter, Inc</orgName>
								<address>
									<settlement>San Francisco</settlement>
									<country key="US">United States</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Beinan</forename><surname>Wang</surname></persName>
							<email>beinanw@twitter.com</email>
							<affiliation key="aff0">
								<orgName type="institution">Twitter, Inc</orgName>
								<address>
									<settlement>San Francisco</settlement>
									<country key="US">United States</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Huijun</forename><surname>Wu</surname></persName>
							<email>huijunw@twitter.com</email>
							<affiliation key="aff0">
								<orgName type="institution">Twitter, Inc</orgName>
								<address>
									<settlement>San Francisco</settlement>
									<country key="US">United States</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Zhenzhao</forename><surname>Wang</surname></persName>
							<email>zhenzhaow@twitter.com</email>
							<affiliation key="aff0">
								<orgName type="institution">Twitter, Inc</orgName>
								<address>
									<settlement>San Francisco</settlement>
									<country key="US">United States</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Yao</forename><surname>Li</surname></persName>
							<email>yaoli@twitter.com</email>
							<affiliation key="aff0">
								<orgName type="institution">Twitter, Inc</orgName>
								<address>
									<settlement>San Francisco</settlement>
									<country key="US">United States</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Vrushali</forename><surname>Channapattan</surname></persName>
							<email>vrushali@twitter.com</email>
							<affiliation key="aff0">
								<orgName type="institution">Twitter, Inc</orgName>
								<address>
									<settlement>San Francisco</settlement>
									<country key="US">United States</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Zhenxiao</forename><surname>Luo</surname></persName>
							<email>zluo@twitter.com</email>
							<affiliation key="aff0">
								<orgName type="institution">Twitter, Inc</orgName>
								<address>
									<settlement>San Francisco</settlement>
									<country key="US">United States</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Ruchin</forename><surname>Kabra</surname></persName>
							<email>rkabra@twitter.com</email>
							<affiliation key="aff0">
								<orgName type="institution">Twitter, Inc</orgName>
								<address>
									<settlement>San Francisco</settlement>
									<country key="US">United States</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Mainak</forename><surname>Ghosh</surname></persName>
							<email>mghosh@twitter.com</email>
							<affiliation key="aff0">
								<orgName type="institution">Twitter, Inc</orgName>
								<address>
									<settlement>San Francisco</settlement>
									<country key="US">United States</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Nikhil</forename><surname>Kantibhai</surname></persName>
							<affiliation key="aff0">
								<orgName type="institution">Twitter, Inc</orgName>
								<address>
									<settlement>San Francisco</settlement>
									<country key="US">United States</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Prachi</forename><surname>Mishra</surname></persName>
							<email>prachim@twitter.com</email>
							<affiliation key="aff0">
								<orgName type="institution">Twitter, Inc</orgName>
								<address>
									<settlement>San Francisco</settlement>
									<country key="US">United States</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">Hybrid-Cloud SQL Federation System at Twitter</title>
					</analytic>
					<monogr>
						<idno type="ISSN">1613-0073</idno>
					</monogr>
					<idno type="MD5">632A1F06D9177A942CAD33D6DA0CD4BA</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-24T05:38+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<textClass>
				<keywords>
					<term>SQL</term>
					<term>cloud</term>
					<term>query engine</term>
					<term>big data</term>
				</keywords>
			</textClass>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>Twitter runs a large-scale SQL federation system to fulfill the increasing need for data analytics alongside high scalability and availability. Recently, with Twitter's efforts in migrating ad-hoc clusters to the cloud, we evolved the SQL system into a hybrid-cloud SQL federation system, across Twitter's data centers and the public cloud, interacting with around 10PB of data daily.</p><p>In this paper, we present the design of the hybrid-cloud SQL federation system, including query federation, cluster federation, and storage federation. We identify challenges in a modern SQL system and how our system helps to address them with some important design decisions. Finally, we reflect on a qualitative examination of lessons learned from the development and maintenance of such a SQL system.</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1.">Introduction</head><p>Twitter runs multiple large Hadoop clusters of over 300PB of data, which are among the biggest in the world <ref type="bibr" target="#b0">[1]</ref>. Billions of events are ingested into these clusters per minute <ref type="bibr" target="#b1">[2]</ref>. Twitter's data platform exerts significant effort in pursuing system scalability and availability to fulfill the data analytics on such large volume data inventory and high throughput data flow.</p><p>At Twitter, a typical OLAP (Online Analytical Processing) workload mainly contains ad-hoc queries, empowering a wide range of use cases from internal tooling reporting to ads click-rate analysis. A SQL system needs to be capable of processing a large number of queries in parallel. Previously, we implemented an in-house SQL system in Twitter's data center (aka private cloud) with hundreds of worker nodes, accompanied by internal Twitter services such as monitoring and logging. At present, to enhance the experience and productivity, Twitter engineering is embarking on an effort to migrate ad-hoc clusters to the GCP (Google Cloud Platform), aka the "Partly Cloudy" <ref type="bibr" target="#b2">[3]</ref>. Partly Cloudy extends Twitter's environment into the public cloud, as a first-class offering alongside on-premises platform services.</p><p>The hybrid-cloud environment brings challenges, leading to a fundamental architectural shift for an OLAP system. From our development and operational experience, a modern unified SQL system should handle a series of challenges:</p><p>• Querying heterogeneous data sources in the application layer. With the growth of the business, more use cases emerged, leading to querying heterogeneous data sources, usually processed by different on-premises or cloud query systems with different configurations and interfaces. For example, data scientists from the Health team query data stored in HDFS (Hadoop Distributed File System), processed by HDFS-compatible SQL engines such as Hive <ref type="bibr" target="#b3">[4]</ref>, SparkSQL <ref type="bibr" target="#b4">[5]</ref>, and Presto <ref type="bibr" target="#b5">[6]</ref>, to analyze hate speech in the social media platform. Data engineers from the Ads team query data stored in GCS (Google Cloud Storage), processed by cloud query engines such as Presto on GCP, to validate data existence and accuracy. Infrastructure engineers from the Tooling team gain insights from the usage data stored and processed in MySQL and create shareable dashboards. Use cases may also involve querying and joining tables from various data sources. A modern SQL system should support querying heterogeneous data sources in a unified interface. • Horizontal scaling in the computation layer. We have witnessed a boost in the number of daily queries sent into Twitter's SQL system in the recent few years. From our operational experience, vertical scaling cannot handle this large number of analytical queries which can cost a considerable amount of resources 1 . A modern SQL system usually prefers the horizontal scaling approach to serve analytical queries <ref type="bibr" target="#b6">[7]</ref>. In addition, as an on-premises data center usually has a limited capacity, the horizontal scaling may need to cross data centers or on-premises/cloud environments. As a result, the SQL system needs to handle the challenges brought from horizontal scaling such as cluster orchestration, workload balancing, and fault tolerance. • Heterogeneous storage systems in the storage layer. With the advent of the Big Data era, large-scale storage systems are developed to fulfill the requirements of archiving the scaling volume of data while also maintaining data availability and consistency. The variety of on-premises and cloud data storage systems also poses challenges for a modern SQL system. Maintaining heterogeneous storage systems is a major challenge we have faced in the development and maintenance of Twitter's SQL system. In a modern SQL system, no matter the dataset is stored in which on-premises storage cluster and/or which cloud storage system, query engines should access the dataset through a unified interface without memorizing the concrete physical paths of target datasets.</p><p>To overcome these challenges, Twitter engineering teams implement a hybrid-cloud SQL federation system, which processes around 10PB of data daily in production. This paper presents the evolution of the SQL system at Twitter including query federation, cluster federation, and storage federation.</p><p>The remainder of this paper is organized as follows. We describe the architectural design and implementation of the hybrid-cloud SQL federation system in Section 2, discuss related work in Section 3, and reflect on lessons learned in Section 4. Section 5 concludes the paper. 1 From an analysis of a typical Twitter OLAP workload in three months, 19.2% of queries consume more than 1TB peak memory.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.">SQL Federation System Design &amp; Implementation</head></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.1.">Overview</head><p>Figure <ref type="figure" target="#fig_0">1</ref> depicts the architectural design of the hybrid-cloud SQL federation system at Twitter. There are three components: query federation, cluster federation, and storage federation. Query federation. This exposes a unified query layer to customers such that one interface rules multiple query clusters for heterogeneous data sources. Query federation consists of a SQL component and a programming API component. At Twitter, the SQL component supports basic ANSI SQL semantics as well as some Twitter-specific features implemented into UDFs (userdefined functions). The programming API component enables auxiliary flexible programming features. User requests are eventually converted to SQL and passed to the cluster federation.</p><p>Cluster federation. This provides a unified cluster layer to the query federation, resolving the challenge of horizontal scaling. It exposes a single entry point, a router service, and hides the cluster details, which reduces the development and maintenance cost. The router service acts as the administrator of SQL engine clusters, helping to schedule queries across the clusters and balancing the workloads among the clusters. Fault tolerance is also improved by forwarding requests only to available clusters when a cluster fails and is offline.</p><p>Storage federation. This offers a unified view of datasets stored in different archival systems. At Twitter, we are heavily leveraging HDFS as the major on-premises distributed storage platform. In a cloud environment like GCP, we use GCS as the core storage system. The unified layer provides a unique path for each dataset stored in both on-premises and cloud, entirely getting rid of the burden of memorizing accurate physical locations for datasets.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.2.">Query Federation</head><p>The query federation fulfills three goals. First, it, as a user-facing front-end, converts user inputs to SQL and feeds SQL to the cluster federation. Second, it defines datasets in SQL such that users can locate data from different sources with a uniform approach. Third, it provides UI for interaction and visualization. We leverage Zeppelin <ref type="bibr" target="#b7">[8]</ref> to implement the first and third goals, while the second goal is achieved with the help of Presto in the cluster federation. Figure <ref type="figure" target="#fig_1">2</ref> illustrates some SQL examples of query federation in a Zeppelin notebook. Apache Zeppelin is a web-based notebook service that enables interactive data analytics. In the figure, the first query and the second one are pointing to the on-premise and cloud SQL clusters respectively, identified by a prefix to flag whether the query should be processed in Twitter's data center or public cloud. No extra configuration is required. Although as of the date of publication of this paper, users still have to explicitly mark the target data center, Twitter's data platform engineers are in the planning stage of rolling out a set of features that include automatic recognition with table metadata, data locality, and system performance. Besides accessing data within one data source, the third SQL statement in Figure <ref type="figure" target="#fig_1">2</ref> refers to a federated query, joining two tables from HDFS and MySQL. A federated query can refer to joining tables scattered in various data sources. Thus, a query processing engine that can access various data sources should be adopted in the SQL federation system. Presto is adopted for this scenario, which is a distributed SQL query engine targeting "SQL on everything". With a Connector API communicating with external data stores, data is fetched and then converted to the unified internal Presto data types, such that further query processing, such as joining tables, can be accomplished.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.3.">Cluster Federation</head><p>Figure <ref type="figure" target="#fig_2">3</ref> depicts the architectural design of cluster federation with the following components:</p><p>Router. The router service is the single entry point and the core of the cluster federation, which exposes a unified interface to the query tools, hides cluster details, and routes requests to concrete clusters. Meanwhile, it helps to balance the workloads among the clusters. Our prior SQL system suffered from imbalanced workloads as the clusters are exposed directly to clients. Some clients may send too many queries to a specific cluster, exhausting the compute resources of that cluster, but leaving other clusters idle. The current hybrid-cloud SQL federation system harnesses multiple routing algorithms including round-robin, random selection, and more complicated load-based approaches with the help of a query cost predictor.</p><p>Query cost predictor. This is a preditor service to forecast the CPU and memory resource usages of each SQL query. It applies machine learning techniques to learn from historical SQL queries. The predictor details are beyond the scope of this paper and discussed in a separate paper <ref type="bibr" target="#b9">[10]</ref>. SQL engine cluster. Presto is the query engine utilized in a SQL engine cluster. Each Presto cluster consists of a coordinator node and one or more worker nodes. A SQL engine cluster may be deployed in Twitter's data center or cloud. When it is deployed in Twitter's data center, it queries data stored in on-premises services such as HDFS. By contrast, when it is in the GCP, it queries data stored in the GCS. The SQL engine clusters do not query data across data centers due to performance concerns.</p><p>With the cluster federation, users only view logical clusters. When a cluster fails and is offline, the router will remove it from the available cluster list and will not route any requests to this cluster. When the cluster recovers from the failure and is back online, the router will find the cluster through service discovery, mark it as available, and route requests to this cluster. This also improves the availability and fault tolerance, mitigating the maintenance pain we have faced in the prior SQL system with separate clusters. To ease the administration of SQL engine clusters, we build an aggregated UI, shown in Figure <ref type="figure" target="#fig_3">4</ref>, on top of the original Presto UI. The UI aggregates the status of all SQL engine clusters, sums the running queries, and monitors the active workers. Moreover, we can dive deeper into one specific cluster to investigate the performance metrics, collected into a unified UI shown in Figure <ref type="figure" target="#fig_4">5</ref>. This panel visualizes metrics, including success rates, failures, cluster memory, running queries, etc., collected in the past two weeks. </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.4.">Storage Federation</head><p>To fulfill both scaling data and high availability requirements, Twitter engineers maintain storage clusters in both Twitter's data center and public cloud. Figure <ref type="figure" target="#fig_5">6</ref> depicts the high-level design of the storage federation platform, which is backed by hundreds of thousands of data replication jobs. This platform contains the unified view for data stored in on-premises HDFS clusters and a cloud storage system (GCS in the GCP). On-premises HDFS. Twitter's data platform maintains multiple HDFS clusters across data centers, shown as the left part in Figure <ref type="figure" target="#fig_5">6</ref>. Multiple namespaces are also required due to scalability and use case isolation requirements. We scale HDFS by federating these namespaces with user-friendly paths instead of long complicated URIs <ref type="bibr" target="#b10">[11]</ref>. As shown in Figure <ref type="figure" target="#fig_5">6</ref>, first, the original on-premises data path is hdfs://cluster-X-nn:8020/logs/partly-cloudy (nn refers to the namenode in HDFS), indicating the data resides in Cluster X in Data Center 1, under the namespace logs. Second, we leverage Hadoop ViewFs <ref type="bibr" target="#b11">[12]</ref> to provide a single view across namespaces, starting with viewfs://. So the original path will become viewfs://cluster-X/logs/partly-cloudy. Finally, we extend the ViewFs and implement Twitter's View FileSystem, offering a unified user-friendly path (/DataCenter-1/cluster-X/logs/partly-cloudy in Figure <ref type="figure" target="#fig_5">6</ref>) and enabling native HDFS access. A replicator service is also created to help access data stored in different locations.</p><p>Cloud storage (GCS). Because of the large data volume and use case isolation, we are maintaining thousands of GCS buckets at Twitter. We also leverage the View FileSystem abstraction to hide GCS details behind the storage interface. The cloud storage connector is utilized to interact with GCS via Hadoop APIs. We apply the RegEx-based path resolution to resolve the GCS bucket path, by dynamically creating mountable mapping on-demand in Twitter's View FileSystem. As shown in Figure <ref type="figure" target="#fig_5">6</ref>, similar to HDFS, the GCS bucket gs://logs.partlycloudy is finally resolved as /gcs/logs/partly-cloudy.</p><p>As a result, the storage federation only exposes standard unique paths of datasets, no matter they reside in the on-premises HDFS clusters or GCS. In addition, Twitter engineers maintain a metadata service, connected with these storage systems, aiming to provide the standard path of the closest target dataset to query engines. For example, in Figure <ref type="figure" target="#fig_5">6</ref>, querying the same partly-cloudy dataset, if the query engine is in a Twitter's data center, the on-premises path /DataCenter-1/cluster-X/logs/partly-cloudy will be returned. By contrast, if the query engine is in the cloud, the cloud path /gcs/logs/partly-cloudy will be returned.  To view dataset configuration details, Twitter engineers create a unified UI, shown in Figure <ref type="figure" target="#fig_7">7</ref>, with segment support for files stored in various physical locations. Users can thus view different destinations for the same dataset. Specifically, Figure <ref type="figure" target="#fig_7">7a</ref> illustrates details of the query log dataset of Presto stored in an on-premises HDFS cluster; Figure <ref type="figure" target="#fig_7">7b</ref> points to details of the same dataset stored in the GCS. Figures also show segment delays and segment block information.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.">Related Work</head><p>With the increasing volume of data, many distributed SQL engines, targeted for analyzing Big Data, emerged in the recent decade. For example, Apache Hive <ref type="bibr" target="#b3">[4]</ref> is a data warehouse built on top of Hadoop, providing a SQL-like interface for data querying and a warehousing solution to address some issues of MapReduce <ref type="bibr" target="#b12">[13]</ref>. Spark SQL <ref type="bibr" target="#b4">[5]</ref> is a module integrated with Apache Spark, powering relational processing to Spark data structures. Presto <ref type="bibr" target="#b5">[6]</ref>, originally developed by Facebook, is a distributed SQL engine, targeting "SQL on everything". It can query data from multiple sources which is a major advantage over other SQL engines. Procella <ref type="bibr" target="#b13">[14]</ref> is a SQL query engine, employed by YouTube, serving hundreds of billions of queries per day.</p><p>With the advent of the public cloud, some cloud-based commercial SQL products emerged in the recent decade. For example, Google BigQuery [15] (a public implementation of Dremel <ref type="bibr" target="#b14">[16,</ref><ref type="bibr" target="#b15">17]</ref>) offers a cloud-based, fully-managed, and serverless data warehouse. Similarly, Snowflake <ref type="bibr" target="#b16">[18]</ref> provides a multi-tenant, transactional, and elastic system with full SQL support for both semi-structured and schema-less data. Amazon Redshift <ref type="bibr" target="#b17">[19]</ref> applies a classic shared-nothing architecture with Vertica <ref type="bibr" target="#b18">[20]</ref>-similar compression techniques, acting as a fully-managed PBscale data warehouse solution in AWS. Azure Synapse Analytics <ref type="bibr" target="#b19">[21]</ref> separates compute and storage for cloud-native execution, bringing together data warehousing and big data workloads.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.">Lessons Learned</head><p>In this section, we recount some of the qualitative lessons we have learned from the development and maintenance of the SQL federation system at Twitter.</p><p>System monitoring and logging in a hybrid-cloud environment are vital. Although our hybrid-cloud SQL federation system almost always works well, sometimes when the system goes wrong, it can be a headache to locate the root cause. We also observed architectural differences between on-premises and cloud environments, such as cluster provisioning and security enforcement. An important design decision we have made is implementing a realtime monitoring system with metrics collection and an injectable logging system to trace execution flows. The monitoring system provides a central platform to collect predefined and user-customized metrics, serves observability dashboards/alerts, and helps developers drill down to detailed metrics. Meanwhile, the injectable logging system provides APIs to inject logging points into application source code, collects the logs, and visualizes the execution flows.</p><p>The on-premises capacity planning experience cannot be directly transferred to a hybrid-cloud environment. During the migration of parts of on-premises workload to the cloud, we discovered that the capacity planning experience cannot be easily reused and shared across data centers, due to varied technical stacks and resource provisioning strategies. For example, one of our early migrated use cases requires around 50 machines in Twitter's data center but needs around 60 to get comparable performance, even though all these machines are sharing similar hardware configuration. This indicates the need for additional prototypes for capacity planning and extra tuning of service in a hybrid-cloud environment.</p><p>SQL is still one of the most widely used languages in data analytics. As a declarative language, SQL lets users focus on defining the data analytics tasks without worrying about the specifics on how to complete these tasks. Thanks to SQL's high expressiveness in queries and large existing customer bases, some execution engines previously without SQL support, such as Druid <ref type="bibr" target="#b20">[22]</ref> and Beam <ref type="bibr" target="#b21">[23]</ref>, began to support SQL on top of their native query layers. In addition, some SQL variants, such as BigQuery ML <ref type="bibr" target="#b22">[24]</ref>, even introduced SQL into machine learning use cases. From our observation, SQL is still widely used in data analytics, although challenged by some competitive alternatives such as Python. Python is more like a powerful supplement for SQL in data analytics with its concise styles and extreme popularity in machine learning, instead of a complete replacement.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5.">Conclusion</head><p>We discussed the evolution of the hybrid-cloud SQL federation system in Twitter's data platform. With various demands for data analytics nowadays, we identified challenges faced within a modern SQL system in the application layer, computation layer, and storage layer. The presented hybrid-cloud SQL federation system overcomes these challenges by implementing query federation, cluster federation, and storage federation. We also discussed some lessons we learned from developing, deploying, and maintaining the system, which we believe can provide some deeper insights for building a large-scale interactive query platform.</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>Figure 1 :</head><label>1</label><figDesc>Figure 1: Overview of the hybrid-cloud SQL federation system in three layers.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head>Figure 2 :</head><label>2</label><figDesc>Figure 2: Three SQL query federation examples in a Zeppelin notebook. All SQL statements are from the TPC-H benchmark [9].</figDesc><graphic coords="4,97.51,177.42,400.25,154.25" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_2"><head>Figure 3 :</head><label>3</label><figDesc>Figure 3: Architectural design of the cluster federation.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_3"><head>Figure 4 :</head><label>4</label><figDesc>Figure 4: Unified UI for cluster federation.</figDesc><graphic coords="5,191.94,444.26,211.20,101.40" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_4"><head>Figure 5 :</head><label>5</label><figDesc>Figure 5: Monitoring and alerting of one SQL engine (Presto) cluster.</figDesc><graphic coords="6,92.00,84.19,411.29,133.13" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_5"><head>Figure 6 :</head><label>6</label><figDesc>Figure 6: Architectural design of the storage federation.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_6"><head></head><label></label><figDesc>(a) Details of a dataset in on-premises HDFS. (b) Details of a dataset in GCS.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_7"><head>Figure 7 :</head><label>7</label><figDesc>Figure 7: Unified UI for datasets stored in HDFS and GCS.</figDesc><graphic coords="7,90.39,299.37,202.84,165.60" type="bitmap" /></figure>
		</body>
		<back>

			<div type="acknowledgement">
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Acknowledgment</head><p>Twitter's SQL federation system is a complicated project that has evolved for years. We would like to express our gratitude to everyone who has served on Twitter's Interactive Query team, including former team members Hao Luo, Yaliang Wang, Da Cheng, Fred Dai, and Maosong Fu. We also appreciate Daniel Lipkin and Derek Lyon for their strategic vision, direction, and support to the team. Finally, we thank Erica Hessel, Alex Angarita Rosales, and the anonymous ECSA reviewers for their informative comments, which considerably improved our paper.</p></div>
			</div>

			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<monogr>
		<title level="m" type="main">A new collaboration with Google Cloud</title>
		<author>
			<persName><forename type="first">P</forename></persName>
		</author>
		<ptr target="https://blog.twitter.com/engineering/en_us/topics/infrastructure/2018/a-new-collaboration-with-google-cloud.html" />
		<imprint>
			<date type="published" when="2018">2018</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<analytic>
		<title level="a" type="main">Scaling event aggregation at Twitter to handle billions of events per minute</title>
		<author>
			<persName><forename type="first">L</forename><surname>Vijayarenu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Z</forename><surname>Wang</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Rottinghuis</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">2020 IEEE Infrastructure Conference</title>
				<imprint>
			<publisher>IEEE</publisher>
			<date type="published" when="2020">2020</date>
			<biblScope unit="page" from="1" to="4" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<monogr>
		<title level="m" type="main">Partly Cloudy: The start of a journey into the cloud</title>
		<author>
			<persName><forename type="first">J</forename><surname>Rottinghuis</surname></persName>
		</author>
		<ptr target="https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/the-start-of-a-journey-into-the-cloud.html" />
		<imprint>
			<date type="published" when="2019">2019</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<analytic>
		<title level="a" type="main">Hive: A warehousing solution over a map-reduce framework</title>
		<author>
			<persName><forename type="first">A</forename><surname>Thusoo</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">S</forename><surname>Sarma</surname></persName>
		</author>
		<author>
			<persName><forename type="first">N</forename><surname>Jain</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Z</forename><surname>Shao</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Chakka</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Anthony</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Liu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Wyckoff</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Murthy</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the VLDB Endowment</title>
				<meeting>the VLDB Endowment</meeting>
		<imprint>
			<date type="published" when="2009">2009</date>
			<biblScope unit="volume">2</biblScope>
			<biblScope unit="page" from="1626" to="1629" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<analytic>
		<title level="a" type="main">Spark SQL: Relational data processing in Spark</title>
		<author>
			<persName><forename type="first">M</forename><surname>Armbrust</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><forename type="middle">S</forename><surname>Xin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Lian</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Y</forename><surname>Huai</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Liu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">K</forename><surname>Bradley</surname></persName>
		</author>
		<author>
			<persName><forename type="first">X</forename><surname>Meng</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Kaftan</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">J</forename><surname>Franklin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Ghodsi</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 2015 ACM SIGMOD international conference on management of data</title>
				<meeting>the 2015 ACM SIGMOD international conference on management of data</meeting>
		<imprint>
			<date type="published" when="2015">2015</date>
			<biblScope unit="page" from="1383" to="1394" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">Presto: SQL on everything</title>
		<author>
			<persName><forename type="first">R</forename><surname>Sethi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Traverso</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Sundstrom</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Phillips</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><surname>Xie</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Y</forename><surname>Sun</surname></persName>
		</author>
		<author>
			<persName><forename type="first">N</forename><surname>Yegitbasi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Jin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><surname>Hwang</surname></persName>
		</author>
		<author>
			<persName><forename type="first">N</forename><surname>Shingte</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">IEEE 35th International Conference on Data Engineering (ICDE)</title>
				<imprint>
			<publisher>IEEE</publisher>
			<date type="published" when="2019">2019. 2019</date>
			<biblScope unit="page" from="1802" to="1813" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<title level="a" type="main">Choosing a cloud DBMS: Architectures and tradeoffs</title>
		<author>
			<persName><forename type="first">J</forename><surname>Tan</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Ghanem</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Perron</surname></persName>
		</author>
		<author>
			<persName><forename type="first">X</forename><surname>Yu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Stonebraker</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Dewitt</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Serafini</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Aboulnaga</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Kraska</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the VLDB Endowment</title>
				<meeting>the VLDB Endowment</meeting>
		<imprint>
			<date type="published" when="2019">2019</date>
			<biblScope unit="volume">12</biblScope>
			<biblScope unit="page" from="2170" to="2182" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<monogr>
		<ptr target="https://zeppelin.apache.org/" />
		<title level="m">Apache Zeppelin</title>
				<imprint>
			<date type="published" when="2021">2021</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b8">
	<monogr>
		<title/>
		<author>
			<persName><surname>Benchmark</surname></persName>
		</author>
		<ptr target="http://www.tpc.org/tpch/" />
		<imprint>
			<date type="published" when="2021">2021</date>
		</imprint>
		<respStmt>
			<orgName>TPC-</orgName>
		</respStmt>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<analytic>
		<title level="a" type="main">Forecasting SQL query cost at Twitter</title>
		<author>
			<persName><forename type="first">C</forename><surname>Tang</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Wang</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Z</forename><surname>Luo</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Wu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Dasan</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Fu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Y</forename><surname>Li</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Ghosh</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Kabra</surname></persName>
		</author>
		<author>
			<persName><forename type="first">N</forename><forename type="middle">K</forename><surname>Navadiya</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Cheng</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename><surname>Dai</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><surname>Channapattan</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Mishra</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">2021 IEEE 9th International Conference on Cloud Engineering (IC2E)</title>
				<imprint>
			<publisher>IEEE</publisher>
			<date type="published" when="2021">2021</date>
		</imprint>
	</monogr>
	<note>in press</note>
</biblStruct>

<biblStruct xml:id="b10">
	<monogr>
		<title level="m" type="main">Hadoop filesystem at Twitter</title>
		<author>
			<persName><forename type="first">R</forename><surname>Barga</surname></persName>
		</author>
		<ptr target="https://blog.twitter.com/engineering/en_us/a/2015/hadoop-filesystem-at-twitter" />
		<imprint>
			<date type="published" when="2015">2015</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<monogr>
		<title/>
		<author>
			<persName><forename type="first">Hadoop</forename><surname>Viewfs</surname></persName>
		</author>
		<ptr target="https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/ViewFs.html" />
		<imprint>
			<date type="published" when="2021">2021</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b12">
	<analytic>
		<title level="a" type="main">Mapreduce: simplified data processing on large clusters</title>
		<author>
			<persName><forename type="first">J</forename><surname>Dean</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Ghemawat</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Communications of the ACM</title>
		<imprint>
			<biblScope unit="volume">51</biblScope>
			<biblScope unit="page" from="107" to="113" />
			<date type="published" when="2008">2008</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b13">
	<analytic>
		<title level="a" type="main">Procella: Unifying serving and analytical data at YouTube</title>
		<author>
			<persName><forename type="first">B</forename><surname>Chattopadhyay</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Dutta</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><surname>Liu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">O</forename><surname>Tinn</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Mccormick</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Mokashi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Harvey</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Gonzalez</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Lomax</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Mittal</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><forename type="middle">A</forename><surname>Ebenstein</surname></persName>
		</author>
		<author>
			<persName><forename type="first">N</forename><surname>Mikhaylin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Ching Lee</surname></persName>
		</author>
		<author>
			<persName><forename type="first">X</forename><surname>Zhao</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Xu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><forename type="middle">A</forename><surname>Perez</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename><surname>Shahmohammadi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Bui</surname></persName>
		</author>
		<author>
			<persName><forename type="first">N</forename><surname>Mckay</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><surname>Lychagina</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Elliott</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the VLDB Endowment</title>
				<meeting>the VLDB Endowment</meeting>
		<imprint>
			<date type="published" when="2019">2019</date>
			<biblScope unit="volume">12</biblScope>
			<biblScope unit="page" from="2022" to="2034" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b14">
	<analytic>
		<title level="a" type="main">Dremel: Interactive analysis of web-scale datasets</title>
		<author>
			<persName><forename type="first">S</forename><surname>Melnik</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Gubarev</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">J</forename><surname>Long</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Romer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Shivakumar</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Tolton</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Vassilakis</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the VLDB Endowment</title>
				<meeting>the VLDB Endowment</meeting>
		<imprint>
			<date type="published" when="2010">2010</date>
			<biblScope unit="volume">3</biblScope>
			<biblScope unit="page" from="330" to="339" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b15">
	<analytic>
		<title level="a" type="main">Dremel: A decade of interactive sql analysis at web scale</title>
		<author>
			<persName><forename type="first">S</forename><surname>Melnik</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Gubarev</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">J</forename><surname>Long</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Romer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Shivakumar</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Tolton</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Vassilakis</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Ahmadi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Delorey</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Min</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the VLDB Endowment</title>
				<meeting>the VLDB Endowment</meeting>
		<imprint>
			<date type="published" when="2020">2020</date>
			<biblScope unit="volume">13</biblScope>
			<biblScope unit="page" from="3461" to="3472" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b16">
	<analytic>
		<title level="a" type="main">The Snowflake elastic data warehouse</title>
		<author>
			<persName><forename type="first">B</forename><surname>Dageville</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Cruanes</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Zukowski</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><surname>Antonov</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Avanes</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Bock</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Claybaugh</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Engovatov</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Hentschel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Huang</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 2016 International Conference on Management of Data</title>
				<meeting>the 2016 International Conference on Management of Data</meeting>
		<imprint>
			<date type="published" when="2016">2016</date>
			<biblScope unit="page" from="215" to="226" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b17">
	<analytic>
		<title level="a" type="main">Amazon Redshift and the case for simpler data warehouses</title>
		<author>
			<persName><forename type="first">A</forename><surname>Gupta</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Agarwal</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Tan</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Kulesza</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Pathak</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Stefani</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><surname>Srinivasan</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 2015 ACM SIGMOD international conference on management of data</title>
				<meeting>the 2015 ACM SIGMOD international conference on management of data</meeting>
		<imprint>
			<date type="published" when="2015">2015</date>
			<biblScope unit="page" from="1917" to="1923" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b18">
	<analytic>
		<title level="a" type="main">The Vertica analytic database: C-store 7 years later</title>
		<author>
			<persName><forename type="first">A</forename><surname>Lamb</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Fuller</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Varadarajan</surname></persName>
		</author>
		<author>
			<persName><forename type="first">N</forename><surname>Tran</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Vandiver</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><surname>Doshi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Bear</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the VLDB Endowment</title>
				<meeting>the VLDB Endowment</meeting>
		<imprint>
			<date type="published" when="2012">2012</date>
			<biblScope unit="volume">5</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b19">
	<analytic>
		<title level="a" type="main">POLARIS: the distributed SQL engine in Azure Synapse</title>
		<author>
			<persName><forename type="first">J</forename><surname>Aguilar-Saborit</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Ramakrishnan</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Srinivasan</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Bocksrocker</surname></persName>
		</author>
		<author>
			<persName><forename type="first">I</forename><surname>Alagiannis</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Sankara</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Shafiei</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Blakeley</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Dasarathy</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Dash</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the VLDB Endowment</title>
				<meeting>the VLDB Endowment</meeting>
		<imprint>
			<date type="published" when="2020">2020</date>
			<biblScope unit="volume">13</biblScope>
			<biblScope unit="page" from="3204" to="3216" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b20">
	<monogr>
		<ptr target="https://druid.apache.org/docs/latest/querying/sql.html" />
		<title level="m">Apache Druid SQL</title>
				<imprint>
			<date type="published" when="2021">2021</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b21">
	<monogr>
		<ptr target="https://beam.apache.org/documentation/dsls/sql/overview/" />
		<title level="m">Apache Beam SQL</title>
				<imprint>
			<date type="published" when="2021">2021</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b22">
	<monogr>
		<author>
			<persName><forename type="first">M</forename><surname>Mucchetti</surname></persName>
		</author>
		<author>
			<persName><surname>Ml</surname></persName>
		</author>
		<title level="m">BigQuery for Data Warehousing</title>
				<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2020">2020</date>
			<biblScope unit="page" from="419" to="468" />
		</imprint>
	</monogr>
	<note>BigQuery</note>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
