<?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">A Relational Approach to Complex Dataflows</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author role="corresp">
							<persName><forename type="first">Yannis</forename><surname>Chronis</surname></persName>
							<email>i.chronis@di.uoa.gr</email>
							<affiliation key="aff0">
								<orgName type="laboratory">Foufoulas Vaggelis Nikolopoulos</orgName>
								<orgName type="institution">Yannis Alexandros Papadopoulos Lefteris Stamatogiannakis Christoforos Svingos Yannis Ioannidis</orgName>
							</affiliation>
							<affiliation key="aff1">
								<orgName type="department">Dept. of Informatics and Telecom</orgName>
								<orgName type="laboratory">MaDgIK Lab</orgName>
								<orgName type="institution">University of Athens</orgName>
								<address>
									<country key="GR">Greece</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">A Relational Approach to Complex Dataflows</title>
					</analytic>
					<monogr>
						<idno type="ISSN">1613-0073)</idno>
					</monogr>
					<idno type="MD5">6E0038108EBC9EE8255A76EBCC41B98B</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-23T21:39+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>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>Clouds have become an attractive platform for highly scalable processing of Big Data, especially due to the concept of elasticity, which characterizes them. Several languages and systems for cloud-based data processing have been proposed in the past, with the most popular among them being based on MapReduce [7]. In this paper, we present Exareme, a system for elastic large-scale data processing on the cloud that follows a more general paradigm. Exareme is an open source project [1] 1 . The system offers a declarative language which is based on SQL with user-defined functions (UDFs) extended with parallelism primitives and an inverted syntax to easily express data pipelines. Exareme is designed to take advantage of clouds by dynamically allocating and deallocating compute resources, offering trade-offs between execution time and monetary cost.</p><p>1 This research is supported in part by the European Commission under Optique, Human Brain and MD-Paedigree projects.</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>Modern applications face the need to process large amount of data using complex functions. Examples include complex analytics <ref type="bibr" target="#b13">[14]</ref>, similarity joins <ref type="bibr" target="#b11">[12]</ref>, and extract-transformload (ETL) processes <ref type="bibr" target="#b14">[15]</ref>. Such rich tasks are typically expressed using high-level APIs or languages <ref type="bibr" target="#b15">[16]</ref> and are transformed into data intensive workflows, or simply dataflows. Exareme uses a master-worker architecture. Our language is based on SQL to express both intra-worker and inter-worker dataflows. We use UDFs and a inverted syntax to easily express local pipelines and complex computations. Interworker dataflows are described with simple parallelism primitives. These abstractions allow users to fine tune dataflows for different applications. All of the basic components of Exareme are designed to support the elastic properties of cloud infrastructures. We provide comparisons to other state of the art systems.</p><p>The system architecture is shown in Figure <ref type="figure" target="#fig_1">1</ref>. From a user's point of view, the system is used as a traditional database system: create / drop tables or indexes, import external data, issue queries. The queries are expressed in ExaDFL. ExaDFL is transformed into data processing flows (dataflows) represented as directed acyclic graphs (DAGs) that have arbitrary computations (operators) as nodes and producer-consumer interactions as edges between the nodes. The typical queries we target are complex data-intensive transformations that are expensive to execute, queries may run for several minutes or hours.</p><p>Exareme is separated into the following components: The Master, is the main entry point, through the gateway, to the system and is responsible for the coordination of the rest of the components. The Execution Engine communicates with the resource manager and schedules the operators of the query respecting their dependencies in the dataflow graph and the available resources. It also monitors the dataflow execution and handles failures.  All the information related to the data and the allocated VMs is stored in the Registry. The Resource Manager is responsible for the allocation and deallocation of VMs based on the demand. The Optimization Engine translates ExaDFL query into the distributed machine code of the system (similar to <ref type="bibr" target="#b12">[13]</ref>) and creates the final execution plan by assigning operators to workers (Section 4.1). Finally, the Worker executes operators (relational operators and UDFs) and transfers intermediate results to other workers. Each worker fetches the partitions needed for the execution and caches them to its local disk for subsequent usage. Madis is the core engine of the Worker <ref type="bibr" target="#b2">[2]</ref>, it is an extension of SQLite, based on the APSW wrapper. It executes the computations described by ExaQL (3.1). Madis processes the data in a streaming fashion and performs pipelining when  </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.1">Data Model</head><p>Exareme adopts the relational data model and extends it with: Complex Field Types: JSON, CSV, and TSV. Table <ref type="table">Partitions</ref>: A table is defined as a set of partitions and a partition is defined as a set of records having a particular property, i.e. the hash value of a column. Partitioning: If the database has multiple tables as it happens in data warehouses, the largest tables are partitioned and all others are replicated along with the partitions. Data placement is crucial for performance and elasticity. We use a modification of consistent hashing <ref type="bibr" target="#b10">[11]</ref>, because it offers good theoretical bounds and can be accurately modeled. To increase flexibility and efficiency we use over-partitioning and replication. This way, changing the size of the virtual infrastructure will cause only data transfer and not the computation of a new partitioning.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.2">Money/Time Trade-Offs</head><p>Exareme can express money/time trade-offs by examining variations of an execution plan, we refer to this notion as eco-elasticity <ref type="bibr" target="#b8">[9]</ref> [8]. Exareme's scheduler creates different execution plans based on the algorithm described in 4.1. Along with every query the user can specify an SLA. Using the SLAs the scheduler chooses the execution plan based on its time and money requirements.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.">LANGUAGE</head><p>Queries are issued to Exareme using ExaDFL. ExaDFL is a dataflow language that describes DAGs and it's based on SQL extended with UDFs and data parallelism primitives <ref type="bibr" target="#b5">[6]</ref>. ExaDFL allows fine control, but requires an understanding of partitioning and data placement. We are currently working on an optimizer that will produce ExaDFL from UDF extended SQL by applying classic database optimizations and transforming functions with their distributed version when it is necessary. In this section we firstly present the language that describes intra-worker dataflows. Then we present the data parallelism primitives and at the end we present the language as one. We use the following subset of TPC-H [3] : lineitem(l orderkey, l comment), orders(o orderkey,o clerk). Both are hash partitioned to 4 parts on their keys.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.1">ExaQL</head><p>ExaQL is based on the SQL-92 standard. The relational primitives of SQL are a good way to express relations and data combinations. We use SQL to combine data and process them with UDFs, whenever the SQL abstractions are not sufficient or efficient to use. We enhanced the syntax of ExaQL to easily combine virtual table functions (UDTFs) into data pipelines. Suppose we want to find the most frequent words that some clerks use in their comments when they buy or sell products. We have the names of the clerks in a compressed XML file that is accessible via HTTP. In ExaQL, we can express it as follows: The query uses the FILE UDTF to fetch, uncompress, and load the data on-the-fly from the HTTP server specified. It is not needed to import or create temporary tables, all the details are handled automatically by the system. The output of FILE is given to the XMLPARSE UDTF that parses the XML content and produces a table with the names of the clerks. Row function STRSPLITV takes a string as input and produces one nested table for each comment by splitting the words into rows. Notice that this behaviour is different from the row functions typically supported by database systems which produce a single value. This is an extension of Exareme for row and aggregate functions.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.2">Data Parallelism Primitives</head><p>The support of simple primitives declaratively express potential data parallelism in the dataflow language itself and let the system decide the actual degree of parallelism at runtime. This is very helpful since the queries are expressed independently of the parallelism used.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.2.1">Input Primitives</head><p>Figure <ref type="figure" target="#fig_5">3</ref> (top) shows the types of combinations supported on two partitioned tables R and S, where a query Q is executed on each partition pair indicated, as well as the type of reduction supported on a single partitioned table. Direct : This combines two (or more) tables that either (a) both have been partitioned in the way required by the combination specified, e.g., a distributed join on tables hashpartitioned on the join attribute, or (b) one has been fully replicated and the other has been partitioned in some fashion, e.g., a join between a small table replicated to the locations of the partitions of much larger table. Cartesian product: This combines two (or more) tables that have been partitioned in ways unrelated to the combination specified. Tree: This performs a multi-level tree reduction on a single table, generalizing the two-level (combine and reduce) reduction of MapReduce. This is used when Q has aggregate functions that are algebraic or distributive and has been shown to exhibit very good performance in practice.   Two or more queries form a script. Each query has two semantically different parts: parallelism and ExaQL. The first part describes the input and output data parallelism used and the second part the computations that get executed on each input combination. The following ExaDFL dataflow is equivalent to the ExaQL query of our example: The first query is executed to download and parse the XML file. The extern directive declares that the query uses an external source and only one instance of the query should be created. The result is a table called clerk that is replicated to 4 partitions. The second query combines tables lineitem, orders, and clerk using the direct input combination. Notice that the result of the join is correct since tables lineitem and orders are partitioned on the join column and table clerk is replicated. Finally, the third query is used to create table result using a tree aggregation. This is possible because the aggregate function sum is distributive. All the temporary tables are deleted automatically at the end of the script.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.2.2">Output Primitives</head></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.3">ExaDFL</head><formula xml:id="formula_0">//</formula></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.">QUERY OPTIMIZATION</head><p>In principle, the optimization process could proceed in one giant step, examining all execution plans that could answer the query and choosing the optimal that satisfies the required constraints. Given the size of the alternatives space in our setting, this approach is infeasible. Instead, our optimization process proceeds in multiple smaller steps, each one operating at some level and making assumptions about the levels below. This is in analogy to query optimization in traditional databases but with the following differences. The operators may represent arbitrary operations and may have performance characteristics that are not known. Furthermore, optimality may be subject to QoS or other constraints and may be based on multiple criteria, e.g., monetary cost of resources, quality of data, etc., and not just solely on performance.The resources available for the execution of a dataflow are not fixed a-priori but flexible and reservable on demand.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.1">Sky</head><p>The dataflow scheduler we use, takes as input the dataflow DAG and assigns its nodes (operators) to workers. It does so by taking into account two types of constraints i) the dataflow (DAG) implied constraints based on the inter-operator dependencies captured by its edges, ii) the execution environment implied constraints due to resource limitations. In that respect, we categorize resources as time-shared and space-shared <ref type="bibr" target="#b9">[10]</ref>. Time-shared resources can be used by multiple operators concurrently at very low overhead. Concurrent use of space-shared resources implies high overheads beyond workers limits of resources. We consider memory as the only space-shared resource, whereas CPU and network as time-shared resources. Constraints are imposed only by space-shared resources in every worker, at any given moment, memory must be sufficient for the execution of the running operators. The scheduling algorithm we propose is Dynamic Skyline (Sky) and is shown in Algorithm 1.</p><p>Sky is an iterative algorithm that incrementally computes the skylines of schedules, Figure <ref type="figure" target="#fig_3">2</ref>. The algorithm begins by scheduling the operators from producers to consumers as defined by the DAG. Each operator with no inputs is a candidate for assignment. An operator is a candidate as soon as all of its inputs are available. The scheduler considers assigning every operator at an existing worker or at a new worker by adding a new VM. The result is a skyline of schedules (Figure <ref type="figure" target="#fig_3">2</ref>). The final execution plan can be selected either manually or automatically based on SLAs. <ref type="bibr" target="#b16">[17]</ref> The scheduler uses the following heuristics regarding data transferring. It transfers only intermediate results and, if possible, does not move original tables. Intermediate results are usually smaller than the original tables because queries with a single input usually contain filters and queries with multiple inputs usually join the tables using equi-joins. This type of join reduces the size of the output table. Some type of queries are executed very efficiently this way, especially when the small tables fit in memory. This is the usual case for OLAP workloads with star or snowflake schema. An- for all containers c of s do 13:</p><p>S ← S ∪ {s + assign(next, c, −, −)} skyline ← skyline of S 23:</p><p>ready ← ready − {next} ∪ {operators in G that dependency constraints no longer exist} 24: end while 25: return skyline other benefit with this approach is the exploitation of indexes if they exists on the original tables. In addition, we add gravity operators pinned to the location of the tables, so the movement of the original tables out of their initial location becomes an optimization choice.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5.">EXPERIMENTAL EVALUATION</head><p>Environment: We used up to 64 VMs, each with 1 CPU, 4 GB of memory, and 20 GB of disk, provided by Okeanos 2 . The average network speed measured was 150 Mbps. Datasets: We generated a total of 256 GB of the following tables, using the TPC-H benchmark <ref type="bibr">[3]</ref>. (in the parenthesis we note the number of partition and the partitioning key) region(1), partsupp(1, ps partkey), orders(128, o orderkey), lineitem(128, l orderkey), customer(1, c custkey), part(1, p partkey), nation(1), and supplier(1). Measurements: We run each query 4 times and report the average of the last 3 measurements. We compared Exareme with Hive <ref type="bibr" target="#b15">[16]</ref> (with both MR <ref type="bibr" target="#b3">[4]</ref> and Tez <ref type="bibr" target="#b4">[5]</ref> as backend, formerly known as Stinger) and System X (an industry leading commercial system). Figure <ref type="figure" target="#fig_8">4</ref> shows the results, to save space we have omitted some results, but only if Exareme is faster. Hive-stinger was always faster than Hive. The versions of the systems we used are Hive 0.13.1, Hadoop 2.5.1, Tez 0.5.0 (intermediate results are compressed (Snappy)). System X is faster for queries 1 and 6 that involve aggregations on the largest table (lineitem). We were not able to execute queries 8 and 9 on System X because of memory limits (System X is an in-memory system). Overall, we observe that Exareme is faster in most cases than the state-of-the art systems. Figure <ref type="figure" target="#fig_9">5</ref> show the profit that is gained when exploiting eco-  elasticity. As a baseline we use three static infrastructures that do not change over time small with 15 VMs, medium with 30 VMs, large with 60 VMs. We run the system for one hour using a client that issue Q1 in three phases, each of 1 hour duration. In the first and third phase, the Poisson parameter λ is set to 60 and in the second phase to 30 (the rate is doubled). The elastic layout allocator produces a better-fitted layout that adapts to the workload changes and yields the highest profit compared to all static choices.</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>C</head><label></label><figDesc>o mp u t e C l o u d E x e c u o n E n g i n e R e s o u r c e Ma n a g e r O p mi z a o n E n g i n e R e g i s t r y P a r s e r G a t e wa y Ma s t e r Wo r k e r Wo r k e r Wo r k e r S t o r a g e C l o u d</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head>Figure 1 :</head><label>1</label><figDesc>Figure 1: Exareme's architecture</figDesc><graphic coords="1,316.81,430.05,239.10,97.92" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_3"><head>Figure 2 :</head><label>2</label><figDesc>Figure 2: Dynamic infrastucture elasticities</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_4"><head></head><label></label><figDesc>select word, count( * ) as count from(select STRSPLITV(l comment) as word from lineitem, orders, (XMLPARSE '["/name"]' FILE 'http://../clerk.xml.gz') as clerk where l orderkey = o orderkey and o clerk = name) as words group by word order by count desc;</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_5"><head>Figure 3 (</head><label>3</label><figDesc>Figure 3 (bottom): Same: The default mode does, the output number of partitions is determined by the input. Partition: Hash partitioning is used. This requires two</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_6"><head>Figure 3 :</head><label>3</label><figDesc>Figure 3: Input Partitioning (top), Output Partitioning (bottom)</figDesc><graphic coords="3,87.22,53.80,172.26,103.68" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_7"><head>Algorithm 1</head><label>1</label><figDesc>Dynamic Skyline Input: G: A dataflow graph. Output: skyline: The skyline schedules. 1: ready ←{operators in G that have no dependencies} 2: op1 ← maxRunningT ime(ready) 3: vm1 ← allocateN ewV M () 4: schedule1 ← {assign(op1, vm1, −, −)} 5: skyline ← {schedule1} 6: while ready = do 7: next ← maxRunningT ime(ready); S ← 8: for s ∈ skyline do 9: if next is pinned then 10: S ← S ∪ {s + assign(next, next.pin loc, −, −)} 11: else 12:</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_8"><head>2Figure 4 :</head><label>4</label><figDesc>Figure 4: TPC-H with 64GB data and 32 VMs on System X, Hive and Exareme</figDesc><graphic coords="4,328.77,53.80,215.19,84.83" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_9"><head>Figure 5 :</head><label>5</label><figDesc>Figure 5: configuration with eco-elasticity vs. static layouts.</figDesc><graphic coords="4,346.70,181.64,179.32,75.30" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_0"><head></head><label></label><figDesc>All of the above compose ExaDFL according to the following grammar:</figDesc><table><row><cell>ExaDFL</cell><cell>:= (&lt;query&gt;)+</cell></row><row><cell>query</cell><cell>:= &lt;parallelism&gt; &lt;ExaQL&gt; ;</cell></row><row><cell>parallelism</cell><cell>:= create distributed [temp]</cell></row><row><cell></cell><cell>table &lt;name&gt; [&lt;output comb&gt;]</cell></row><row><cell></cell><cell>as [&lt;input comb&gt;]</cell></row></table><note>output := [to &lt;number&gt;] [(hash | range)] partition on &lt;name&gt;(,&lt;name&gt;) * input := direct | cprod | tree | extern (the rest is omitted due to space)</note></figure>
		</body>
		<back>

			<div type="acknowledgement">
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="6.">ACKNOWLEDGEMENTS</head><p>The authors would like to thank Herald Kllapi and Manolis Tsangaris.</p></div>
			</div>

			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<monogr>
		<title/>
		<author>
			<persName><surname>References</surname></persName>
		</author>
		<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<monogr>
		<title/>
		<author>
			<persName><surname>Exareme</surname></persName>
		</author>
		<ptr target="http://www.exareme.org/" />
		<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<monogr>
		<title/>
		<author>
			<persName><surname>Madis</surname></persName>
		</author>
		<ptr target="https://github.com/madgik/madis" />
		<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<monogr>
		<ptr target="http://hadoop.apache.org/" />
		<title level="m">Hadoop</title>
				<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<monogr>
		<title/>
		<author>
			<persName><surname>Apache</surname></persName>
		</author>
		<author>
			<persName><surname>Tez</surname></persName>
		</author>
		<ptr target="http://tez.apache.org/" />
		<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<monogr>
		<title level="m" type="main">A Guide to the SQL Standard</title>
		<author>
			<persName><forename type="first">C</forename><forename type="middle">J</forename><surname>Date</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Darwen</surname></persName>
		</author>
		<imprint>
			<date type="published" when="1997">1997</date>
			<publisher>Addison-Wesley Longman</publisher>
		</imprint>
	</monogr>
	<note>4th Ed</note>
</biblStruct>

<biblStruct xml:id="b6">
	<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="m">OSDI</title>
				<imprint>
			<date type="published" when="2004">2004</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<analytic>
		<title level="a" type="main">The cost of doing science on the cloud: the montage example</title>
		<author>
			<persName><forename type="first">E</forename><surname>Deelman</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE/ACM SC</title>
		<imprint>
			<date type="published" when="2008">2008</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b8">
	<analytic>
		<title level="a" type="main">Schedule optimization for data processing flows on the cloud</title>
		<author>
			<persName><forename type="first">K</forename></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">SIGMOD &apos;</title>
		<imprint>
			<biblScope unit="volume">11</biblScope>
			<biblScope unit="page">289</biblScope>
			<date type="published" when="2011">2011</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<analytic>
		<title level="a" type="main">Parallel query scheduling and optimization with time-and space-shared resources</title>
		<author>
			<persName><forename type="first">M</forename><surname>Garofalakis</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Y</forename><surname>Ioannidis</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">VLDB &apos;97</title>
				<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<analytic>
		<title level="a" type="main">Consistent hashing and random trees: Distributed caching protocols for relieving hot spots on the world wide web</title>
		<author>
			<persName><forename type="first">D</forename><forename type="middle">R</forename><surname>Karger</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">STOC</title>
		<imprint>
			<biblScope unit="page" from="654" to="663" />
			<date type="published" when="1997">1997</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<monogr>
		<title level="m" type="main">Near neighbor join</title>
		<author>
			<persName><forename type="first">H</forename><surname>Kllapi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Harb</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Yu</surname></persName>
		</author>
		<imprint>
			<publisher>ICDE</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b12">
	<analytic>
		<title level="a" type="main">Condor -A Hunter of Idle Workstations</title>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">J</forename><surname>Litzkow</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">ICDCS</title>
				<imprint>
			<date type="published" when="1988">1988</date>
			<biblScope unit="page" from="104" to="111" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b13">
	<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>
	</analytic>
	<monogr>
		<title level="j">PVLDB</title>
		<imprint>
			<biblScope unit="volume">3</biblScope>
			<biblScope unit="issue">1</biblScope>
			<biblScope unit="page" from="330" to="339" />
			<date type="published" when="2010">2010</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b14">
	<analytic>
		<title level="a" type="main">Modeling and managing etl processes</title>
		<author>
			<persName><forename type="first">A</forename><surname>Simitsis</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">VLDB PhD Workshop</title>
				<imprint>
			<date type="published" when="2003">2003</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b15">
	<analytic>
		<title level="a" type="main">Hive -a petabyte scale data warehouse using Hadoop</title>
		<author>
			<persName><forename type="first">A</forename><surname>Thusoo</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">ICDE</title>
				<imprint>
			<date type="published" when="2010">2010</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b16">
	<monogr>
		<title level="m" type="main">Intermediate Microeconomics : A Modern Approach</title>
		<author>
			<persName><forename type="first">H</forename><forename type="middle">R</forename><surname>Varian</surname></persName>
		</author>
		<imprint/>
	</monogr>
</biblStruct>

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