alphaFeedback

WorksComputer Science

Data.Readme: Documenting Table Relationships for Diverse Data Tasks

AI contributions
Not recorded for this paper
View details

Abstract

Large language models (LLMs) can perform diverse data tasks when given a small set of relevant tables. However, for complex tasks requiring multiple tables over large data lakes, identifying relevant tables for the task becomes a prerequisite, but remains challenging. This is because there are often many tables in a data lake with similar table and schema names, and limited additional semantic context, thereby forcing agents to spend substantial time exploring tables at online query time, greatly affecting models' ability to perform tasks accurately, while increasing cost/latency substantially. We present Data.Readme, a novel table documentation approach that uses lightweight offline processing to infer and index rich table-to-table relationships, including confusable, joinable, and union-able tables. We further develop a suite of agentic tools for LLMs to work with the index, to help agents retrieve relevant tables and perform tasks much more efficiently and effectively. Finally, we study how to optimize our index construction with a budget constraint. On data lakes containing up to 12K tables, Data.Readme improves task accuracy by as much as 40 percentage points across a range of data discovery, data analysis, and data science tasks, outperforming diverse baselines, including powerful coding agents with unlimited time and monetary budgets. We also show that equipping existing methods (such as coding agents) with Data.Readme can not only lead to consistent quality gains, but also significantly reduce their latency by up to 6x, demonstrating the potential of Data.Readme.

ACM Reference Format:

Jiaming Liang, Yeye He, Haoyu Dong, Zachary Ives, and Surajit Chaudhuri. 2027. Data.Readme: Documenting Table Relationships for Diverse Data Tasks. In Proceedings of SIGMOD Conference on Management of Data (SIGMOD ’27). ACM, New York, NY, USA, 14 pages. https://doi.org/XXXXXXX. XXXXXXX

Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than the author(s) must be honored. Abstracting with credit is permitted. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from [email protected]. SIGMOD ’27, Huntington Beach, CA, USA © 2027 Copyright held by the owner/author(s). Publication rights licensed to ACM. ACM ISBN 978-x-xxxx-xxxx-x/YYYY/MM https://doi.org/XXXXXXX.XXXXXXX

Introduction

Large language models (LLMs) are increasingly capable of performing diverse tasks over tabular data, when given a small set of tables relevant to a task [31, 34]. However, users often need to perform data discovery, data analysis, and data science over a large data lake containing thousands of tables, without knowing in advance which tables are relevant [21, 23]. Such tasks remain challenging for today’s models and agentic harnesses [29, 44].

Consider a concrete example data lake tested in our experiments, illustrated in Figure 1. It contains 17 tables named “Sales,” 29 named “Customers,” and 21 named “Country,” many with similar schemas. To answer a question such as “global sales by customer country” in a particular region and time period, a human or LLM agent must determine not only which Sales table is relevant, but also which Customers and Country tables can be “paired/joined” with that Sales table to answer the question, which is unfortunately non-trivial in a large data lake, as table and schema names alone provide little clue for LLM to identify relevant tables.

Overview of Data.Readme

Figure 1. Overview of Data.Readme. An example Data.Readme in (b), illustrated with abridged table-level entries, is the output of offline indexing (a) and the input to online agentic tools (c). An agent at online query time can utilize the provided agentic tools to retrieves tables relevant to a given query, follows documented relationships, and inspects raw tables.

Therefore, today existing methods (including powerful data agents and coding agents [2, 3, 4]) are often forced to open and explore a large number of tables that may be relevant at online query time, (e.g., all 17 Sales tables and all 29 Customers tables) before locating the ones relevant for a task. This approach is clearly (1) time-consuming, because users must wait while the agent explores the data; (2) less accurate, because the agent must often decide using partial, shallow evidence collected at runtime; and (3) wasteful, as each new question triggers another expensive round of exploration from scratch whose findings are seldom reused.

README for codebases vs. README for data lakes. We draw inspiration from software engineering, where humans and LLMs face a similar readability/discoverability problem in complex codebases, which is commonly addressed with a README [5] and, increasingly, an AGENTS.md for LLM agents [1]. Placed at the root of a repository, these readme documents explain what the code does and how its components relate to each other with navigatable links, allowing developers and agents to reuse knowledge rather than rediscover it from scratch.

This analogy motivates our core research question: Can a README-equivalent for tables benefit data agents operating over data lakes, just as READMEs benefit coding agents operating over codebases?

DATA.README for tables: relationships beyond simple summaries. A natural first step in documenting a dataset is to prompt an LLM to summarize each table and column in natural language, as used in recent work such as AutoDDG [53].

While such approaches are clearly useful, we observe that freeform descriptions of individual tables are insufficient for many complex data tasks, which often depend on table-to-table relationships, and would benefit from a more structured and holistic view of the lake. This resembles how a codebase README would not only describe files in isolation, but also use pointers and hyperlinks to connect related components. We illustrate this with an example.

Example 1. Consider the data lake we encountered in our experiments, whose 17 Sales.csv tables are labeled Sales_1 through Sales_17 in Figure 1(b) for ease of reference. Prior work such as AutoDDG would perform a per-table prompt asking LLM to describe each table using natural language, and populate such descriptions (semantic meaning, grains, statistical profiles of columns, etc.) in the leftmost column labeled as “Basic info (B)” in Figure 1(b). This is already helpful for retrieval tasks, especially for tables and columns with abbreviated or cryptic names [53].

However, given a question such as Q=Q = “global sales by customer country since 2024”, an agent still cannot easily determine from independent per-table descriptions which of the 17 Sales, 29 Customers, and 21 Country tables should be used to answer the question.

In this work, we argue that agents need richer cross-table relationships, including (1) confusable tables, (2) joinable tables, and (3) union-able tables, to answer complex questions over large lakes. We extract such relationships offline through a lightweight LLM-powered indexing step, as illustrated in Figure 1(a).

Specifically, the “Confusable tables (C)” column in Figure 1(b) explains how similarly-named and seemingly-identical tables actually differ in content. For example, Sales_1 and Sales_5 cover different geographic regions, Sales_2 and Sales_8 have different grains, and Sales_17 describes stock-sales rather than retail-sales. We extract these distinctions through an offline analysis that compares similar tables and identifies distinguishing features, enabling efficient online consumption.

The next two columns in the figure similarly record how a table can join with or be unioned with other tables in the lake, also extracted through a deep but efficient offline process.

At online query time, we develop agentic tools that let LLMs navigate these rich cross-table relationships and identify relevant tables, as illustrated in Figure 1(c). For our example query QQ, by following the pointers in Data.README, an agent can accurately and efficiently identify {Sales_1, Sales_14, Country_1, Customer_9} as the tables needed to answer QQ.

In this work we study the Data.README framework using three example types of table-relationships (extensible to additional types): (1) confusable tables, which look similar but differ in grain, geography, time period, aggregation level, or other properties; (2) joinable tables, which have a meaningful semantic join rather than an accidental overlap in key ranges; and (3) union-able tables, which share a compatible schema.

We aim to show that, at the framework level, plugging in different types of relationships can bring substantial quality and latency benefits for diverse agent tasks operating on large data lakes. While we present efficient techniques for extracting these relationships that can scale to large lakes, our goal is not to establish new state-of-the-art methods for each individual relationship type, which has a literature of its own. Instead, the framework is designed to accommodate alternative methods, allowing individual components to be readily replaced as better techniques emerge.

Technical challenges. Producing this documentation for tens of thousands of tables raises challenges that a per-table annotation method like AutoDDG [53] does not face.

Efficient extraction of relationships: The number of possible relationships grows quadratically with the number of tables, where processing using LLM calls can become expensive very quickly. We develop extraction algorithms that scale linearly with the number of tables, or even sub-linearly if there is a fixed cost budget.

Resolving semantic ambiguity: At scale, determining whether two tables are meaningfully related (e.g., confusable or joinable) becomes increasingly challenging and ambiguous. We develop data-driven techniques to resolve such ambiguities while adopting a late-binding strategy that retains plausible relationships until query time, when the user’s question can provide additional evidence for disambiguation.

Agentic tools for Data.README: In a large lake, even concise documentation such as Figure 1(b) may exceed an agent’s context window. We develop tools that let an agent navigate the Data.README index efficiently (e.g., retrieving tables relevant to a query by RAG-top-k, or jumping to tables with known relationships to a target table by name). Our experiments show that these capabilities are effective and necessary to scale to large lakes.

Budget-constrained optimization: Despite our efficient, lightweight indexing, processing every table in a large lake may still be costly. We therefore formulate the Budget-Constrained Table Documentation (BCTD) problem, where given a fixed budget and a representative query log, we want to identify a subset of tables for processing that are most beneficial for the query workload. While we prove that the problem is computationally hard, we develop a fast density-based algorithm called DensitySelect, which has provable approximation guarantees and is effective in experiments.

Contributions. We make the following contributions:

  • We propose Data.README, structured documentation for data lakes that augments per-table descriptions with cross-table relationships such as confusable, joinable, and union-able tables. We also provide agentic tools that make this information easily accessible and navigable to LLMs (§ 2).

  • We develop lightweight, scalable approaches for extracting these relationships, with a bounded linear construction cost despite the quadratic growth in possible table pairs (§ 3).

  • We formulate the budget-constrained scenario as a principled optimization problem, and develop DensitySelect, a density-based algorithm with approximation guarantees (§ 4).

  • We evaluate Data.README on diverse tasks such as data discovery, data analysis, and data science. Across 96 experimental settings (2 lakes × 6 backbone models × 8 benchmark tasks), Data.README outperforms diverse baselines including strong coding agents in 92 out of the 96 settings, all while operating at reduced cost/latency. (§ 5).

Preliminaries and Problem Statement

Preliminaries

Data lake. Let L={T1,…,Tn}\mathcal{L} = \{T_1, \ldots, T_n\} denote a collection of tables, each with a unique identifier, a schema and accessible rows. For instance, in Example 1, we may encounter the many similarly-named tables (Sales, Customers, Country, etc.) in a multi-national’s data lake, which can arise from different regional systems, historical sales records, and revenue summaries.

Data tasks on data lakes. Users often need to perform diverse tasks on data lakes with thousands of tables, without knowing in advance which tables in L\mathcal{L} are relevant. We consider 3 such tasks in this work: data discovery, data analysis, and data science.

In data discovery, let QQ be a user query with the intent to locate relevant tables in L\mathcal{L} (e.g., “global sales by customer country since 2024” in Example 1), the goal is to retrieve the relevant set of tables that can be used to answer QQ (e.g., {Sales_1,Sales_14,Country_1,Customer_9}\{\text{Sales\_1}, \text{Sales\_14}, \text{Country\_1}, \text{Customer\_9}\} in Example 1).

In data analysis, let QQ be a user’s analysis query, and the goal is to answer QQ directly by executing Python or SQL code over relevant tables identified from L\mathcal{L}. Today’s reasoning-capable models can often interleave data discovery and analysis 1, performing calculations as they explore tables (e.g., different Sales tables), and backtracking in a trial-and-error process, which can lead to very different trajectories compared to pure data discovery above.

In data science, we consider the classical predictive modeling task of using a given target column CC in a table T∈LT \in\mathcal{L} as the prediction target (which would be a regression task if CC is numerical, or a classification task if CC is categorical). Agents performing such a predictive task may be able to leverage additional related tables in L\mathcal{L} (e.g., via joins or unions), which can boost predictive accuracy.

Problem Statement

In this work, we study the benefit of providing agents with cross-table relationships in data lakes, by extracting 3 example types of common relationships: R={Confusable,Joinable,Union-able}\mathcal{R} = \{\text{Confusable}, \text{Joinable}, \text{Union-able}\}. We study two problem variants, one without budget constraints and one with a fixed budget.

Definition 1. Relationship extraction in data lakes. Given a data lake L={T1,…,Tn}\mathcal{L} = \{T_1, \ldots, T_n\} and a set of target relationship types R\mathcal{R}, the goal is to extract relationships R\mathcal{R} on L\mathcal{L}, denoted by:

R(L)={(Ti,Tj,r,d)∣relationship r holds for Ti and Tj},\mathcal{R}(\mathcal{L}) = \{(T_i, T_j, r, d) \mid\text{relationship }r\text{ holds for }T_i\text{ and }T_j\},

where Ti,Tj∈LT_i,T_j \in\mathcal{L}, i≠ji \ne j, r∈Rr \in\mathcal{R} and dd is its textual description.

In our example with R={Confusable,Joinable,Union-able}\mathcal{R} = \{\text{Confusable}, \text{Joinable}, \text{Union-able}\}, for each Ti∈LT_i \in\mathcal{L}, we use C(Ti)C(T_i), J(Ti)J(T_i), and U(Ti)U(T_i) to denote its Confusable, Joinable, and Union-able relationships, respectively. The relationship R(L)\mathcal{R}(\mathcal{L}) we want to extract is therefore:

R(L)=⋃Ti∈L(C(Ti)∪J(Ti)∪U(Ti)).\mathcal{R}(\mathcal{L}) = \bigcup_{T_i \in\mathcal{L}} \left(C(T_i) \cup J(T_i) \cup U(T_i)\right).

Figure 1(b) shows an example of such extracted relationships, presented in a markdown table format. Given the pairwise nature of cross-table relationships, a key challenge is to produce such relationships accurately and efficiently (without quadratic comparisons), which we discuss in Section 3.

Although our approach solves the problem in Definition 1 efficiently, at a cost as low as one cent per table using LLMs, extracting relationships for every table in large data lakes containing millions of tables may be neither necessary, nor desirable for users with a fixed budget. We therefore also study a budget-constrained variant of the problem, formalized in Definition 2 below, which assumes access to a historical query log QLQL that is representative of workloads on L\mathcal{L}.

Definition 2. Relationship extraction in data lakes with a budget constraint. Given a data lake L={T1,…,Tn}\mathcal{L} = \{T_1, \ldots, T_n\}, a set of target cross-table relationships: R\mathcal{R}, and extractable relationships R(L)\mathcal{R}(\mathcal{L}) as in Definition 1. Using a fixed budget BB that can be used to extract R(L)\mathcal{R}(\mathcal{L}), and a representative query log QLQL, select a subset S⊆R(L)S \subseteq\mathcal{R}(\mathcal{L}) expected to be the most beneficial for the given QLQL.

While we state this budget-constrained version at a high level, we study a concrete combinatorial optimization problem corresponding to this high level definition in § 4, for which we develop approximation algorithms with provable guarantees.

Data.Readme

System Overview

At a high level, Data.Readme aims to build a relationship graph in large data lakes offline, enriched with natural-language context describing how tables differ or relate, which we posit will help agents to better navigate data lakes and perform complex tasks. Figure 1 gives an overview of our proposed Data.Readme system.

In the offline indexing step shown in Figure 1a, we extract three example cross-table relationships, R={Confusable,Joinable,Union-able}\mathcal{R} = \{\text{Confusable}, \text{Joinable}, \text{Union-able}\} (which are extensible to additional types of relationships), using lightweight processing that scales linearly with the number of tables if there are no budget constraints (§ 3.2), or sub-linearly with a fixed budget constraint (§ 4). In either case, the unit cost of our proposed processing is lightweight, costing as low as $0.01 per table even in large data lakes, when open-source models are used.

Figure 1b shows an example output, represented in a structured manner for navigation. Each row here represents a table, with basic table/column descriptions as well as statistical profiles shown in the second column “Basic info (B)”, that can be produced by prompting LLMs similar to prior work [53]. In addition, we represent the three example cross-table relationships R={Confusable,Joinable,Union-able}\mathcal{R} = \{\text{Confusable}, \text{Joinable}, \text{Union-able}\} as three additional columns to the right, with rich grounded context for why certain tables either differ or relate, which are made possible by today’s LLMs.

In addition to cross-table relationships, we also study table-to-code relationships, like illustrated in the last column of Figure 1b.

At online query time in Figure 1c, given a user task on the data lake — which can be data discovery, data analysis or data science — we show that suitably-designed agentic Data.Readme tools can enable LLMs to navigate a large collection of tables, by jumping from an initial candidate table, to additional tables that may be confusable/joinable/union-able as needed using the index and the tools we build, which we show is both much more effective (with higher task success rates), and efficient (with lower token usage and latency). We will explain the online step in § 3.3.

Offline Index: Extract Relationships

We now describe how we instantiate Data.Readme by extracting three example table relationships, R={Confusable,Joinable,Union-able}\mathcal{R} = \{\text{Confusable}, \text{Joinable}, \text{Union-able}\} in turn below, to populate the corresponding fields labeled as C(T)/J(T)/U(T)C(T)/J(T)/U(T), for each T∈LT \in\mathcal{L} in Figure 1b. These are on top of basic per-table descriptions “Basic info (B)”, denoted by B(T)B(T), that contain table/column descriptions, primary-keys, grains, and statistical profiles that we obtain by prompting LLM once per-table using implementations similar to prior work [11, 53].

Confusable Tables. In a large data lake, it is not uncommon to have many similar-looking tables (e.g., 17 “Sales” tables like discussed in Example 1). Intuitively, we want our offline index to help LLMs understand how these tables differ, and which ones are really relevant to a task at hand, without needing to open up each and every Sales table to inspect at query time. This type of relationship has received little attention in the literature, but is now possible to study with modern LLMs.

The key challenge here lies in efficiently finding pairs of possibly confusable tables in a large lake L\mathcal{L}. While files with the identical name are clearly confusable, it is unclear if other similarly-named tables are also confusable with a given target table (e.g., “Sales_latest” with “Sales”). Given the size of L\mathcal{L}, we need to identify such potentially confusable tables efficiently without quadratic comparisons.

Algorithm 1: Query-driven discovery of confusable tables

input : Tables L\mathcal{L}, basic description {B(T)}T∈L\{B(T)\}_{T \in\mathcal{L}}

output : Symmetric confusable group pairs EE

  1. E←∅E \gets\varnothing;

  2. foreach T∈LT \in\mathcal{L} do

  3. QT←\quad Q_T \gets Generate KK LLM-brainstormed questions about TT;

  4. \quad foreach q∈QTq \in Q_T do

  5. Sq←\qquad S_q \gets top NN tables retrieved for qq by embedding in {B(T)}T∈L\{B(T)\}_{T \in\mathcal{L}};

  6. Rq←\qquad R_q \gets LLM ranked list of tables in SqS_q for qq;

  7. \qquad foreach T′T' ranked higher than TT in RqR_q do

  8. E←E∪{(T,T′),(T′,T)}\qquad\quad E \gets E \cup\{(T,T'),(T',T)\}

  9. return EE;

We develop a query-driven approach to identify such confusable tables, like shown in Algorithm 1. Specifically, for each target table TT that we want to find confusable tables for, we ask LLM to brainstorm a small number of kk (e.g., k=3k = 3) questions that this TT can be used to answer (Line 3). For each such question qq, we compare qq’s embedding with the embedding of the basic descriptions of all tables {B(T)}T∈L\{B(T)\}_{T \in\mathcal{L}}, and retrieve the top-NN (e.g., N=20N = 20) candidates denoted as SqS_q (Line 5). We then ask an LLM to rank SqS_q using a ranked list RqR_q, ordered from the most-likely to least-likely related to qq, so that the LLM will likely open and inspect files in that order (Line 6). Since we know TT can be used to answer qq (as qq is a question brainstormed from TT), we treat all tables that rank higher in RqR_q than TT as potentially confusable with TT. We repeat the process and return the set of confusable table pairs as EE (Line 9).

Such pairs can then be sent to LLMs, together with their basic descriptions B(T)B(T), as well as profiling information (e.g., grains, primary-keys, value-ranges and statistical profiles for each column) collected while generating B(T)B(T), to generate a description that can best distinguish this pair of confusable tables, like illustrated in the column “Confusable tables (C)” of Figure 1.

Example 2. We continue with Example 1 to show how confusable tables are generated. For each table TT, we first ask LLM to brainstorm a small number of kk questions, QTQ_T, that can be answered by TT. Suppose for the first table “Sales_1” in Figure 1, LLM generates a query q∈QTq \in Q_T as “store sales by country”. We embed qq and compare its embedding with the embeddings of basic description of all tables, {B(T)}T∈L\{B(T)\}_{T \in\mathcal{L}}, to retrieve the top-NN candidate tables with the highest embedding similarity to qq, denoted by SqS_q (which may include all 17 “sales” tables as well as others like “sales_latest”).

We then ask the LLM to rank SqS_q based on their table descriptions and a sample of rows for each table in SqS_q. Suppose the LLM-ranked list is Rq={sales_5,sales_17,sales_1,…}R_q = \{\text{sales\_5}, \text{sales\_17}, \text{sales\_1}, \ldots\}. We find that sales_5 and sales_17 are likely confusable with sales_1 for the LLM, since they rank higher than sales_1. To distinguish them, we ask the LLM to explain their differences. Perhaps sales_1 is for “global sales” while sales_5 is for “US sales”, and sales_1 is for “retail store sales” while sales_17 is for “stock sales”, etc., like shown in Figure 1b. □

Cost analysis. The per-table cost of annotating confusable tables for each target table TT, denoted by c(C)c(C), is at most c(C)=(1+kN)c(C) = (1 + kN) LLM calls, where both kk and NN are small constants. Here, 1 is for generating kk brain-stormed questions for TT, and kNkN is to explain all tables ranked higher than TT (which is at most NN), for all kk questions. Note that in practice the number of LLM calls is much smaller, as LLM is often highly capable and can rank the target TT high in its ranked list – empirically, we find that on average LLM ranks only 1.7 tables above the target TT (or N=1.7N = 1.7 empirically). Regardless, c(C)c(C) scales only linearly in the size of the data lake L\mathcal{L} as both kk and NN are fixed constants.

Joinable Tables While join detection is a classical topic in data management as we will review in related work (§ 6), detecting joinable tables efficiently and accurately in large data lakes with tens of thousands of tables is still challenging.

Leveraging recent advances in both LLM and embeddings, we develop a scalable and accurate approach for joinable relationships in large data lakes, that adapts key ingredients from classical join detection [14, 36, 40, 55], as outlined in Algorithm 2.

[Key identification and enrichment]. In Line 3 of Algorithm 2, we start by using LLM to identify candidate primary-keys (PK) and foreign-keys (FK) in each table, using a single LLM call. Specifically, we provide LLM with each table’s schema and sample rows, together with statistical profiles in B(T)B(T) (uniqueness, distinct values, etc.). Using statistical and semantic information, we ask LLMs not only to identify candidate PK/FK in each table (which they can predict very accurately), but also to enrich each PK/FK with alternative column names that are semantically meaningful.

Figure 2 shows such an example, where columns with blue boxes indicate LLM-predicted PK candidates, and columns with orange boxes indicate LLM-predicted FK candidates. LLM also enrich these PK/FK column names with alternative names, such as enriching the PK “id” column in “Sales_1” on the left, as “id” → “sales_id”, “transaction_id” etc., as well as enriching the PK candidate “c_id” in the two tables on the right, as “c_id” → “country_id”, etc.

An example for extracting joinable relationships

Figure 2. An example for extracting joinable relationships.

[Embed PKs]. In Line 5 of Algorithm 2, we then embed each candidate PK column, using their original and alternative column-names, together with column-values, to produce Emb(P)Emb(\mathcal{P}). This is shown in the example of Figure 2 with the step marked as ①, where the PK column “c_id” for table “Country_5” is embedded using its original and enriched column names (“c_id”, “country_id”), as well as sample-values from the column (“1”, “2”, etc.).

[Embed FK for top-K]. Line 7 embeds each candidate FK column ff using the same column-names with sample-values to produce Emb(f)Emb(f); in Line 8, we use Emb(f)Emb(f) to retrieve top-NN Emb(P)Emb(\mathcal{P}), i.e., the PK columns with the highest similarity to the target ff. The top-NN candidates are checked for PK/FK value containment, with passing pairs retained.

Using the example in Figure 2, with the “FK #2” in table “Sales_1” as the target FK ff like shown in step ②, we would embed its column names and values, to retrieve its embedding top-KK PK-candidates like shown in step ③, which include column “c_id” from table “Country_5” and “Country_9” shown on the right (note that these “c_id” columns are ranked high as embedding top-KK for Emb(f)Emb(f), because both are enriched with meaningful column-names like “country_id”, thus producing good matches with Emb(f)Emb(f)). Both of these two “c_id” columns would be checked for PK/FK value containment checks and pass such checks.

[Semantic validation]. Finally, in Line 9, we perform an actual join using candidate PK/FK columns, and ask LLM to check samples from the joined row-pairs to validate semantic plausibility. For instance, in Figure 2, even though both “country_id” columns from “Country_5” and “Country_9” are retrieved as top-N, an LLM-validation step of the joined row-pairs would reveal the join with “Country_5” as invalid, because joining the country-names from “Country_5” into “Sales_1” shows semantic incompatibility (a US address like “Springfield, IL” in country “afghan”, which is thus pruned away; while the join with “Country_9” is semantically plausible and retained as a final PK candidate for “FK #2” (“country_id”) in the figure. All validated join relationships are then documented in Data.Readme like shown in column “Joinable tables (J)” of Figure 1.

Note that for each FK candidate, Algorithm 2 may return more than one PK candidate after all these steps, as in large data lakes PK/FK candidates may not be uniquely resolved. We do not force a unique PK/FK pairing in such cases, and use “late-binding” that retains all plausible pairs in DATA.README, and defer this to query-time for LLM to resolve (where a user query may contain additional disambiguating information, such as referencing a column that is only present in one of the candidate pairs).

Cost analysis. The per-table cost of extracting join-able relationships for each table T∈LT \in\mathcal{L} using Algorithm 2, denoted by c(J)c(J), is at most c(J)=(1+∣FT∣)c(J) = (1 + |F_T|) LLM calls, where 1 is for the LLM call to identify PK/FK candidates in TT (Line 3), and ∣FT∣|F_T| indicates the number of FK candidates on a table TT, where the ∣FT∣|F_T| LLM calls are for validating and ranking the semantic-plausibility for each of the ∣FT∣|F_T| PK/FK candidates (Line 9). Since ∣FT∣|F_T| is the number of candidate FKs per table, it is usually a very small constant (empirically, less than 2 for data lakes we tested). The cost c(J)c(J) is therefore a small constant, making its cost linear in the number of tables in L\mathcal{L}.

Union-able Tables. Union-able tables are common in data lakes, and are often partitioned by time or geographic boundaries, because data pipelines would often dump data at regular intervals (e.g., daily or hourly), thereby creating sub-partitioned tables with identical schemas and similar filenames following a fixed pattern, like the examples from real data lakes in Figure 3 would show. This is widely reported in prior studies [6, 37, 43] and is very common in real data lakes, as such union-able tables are typically “machine-generated” by recurring pipelines [6, 37].

Union-able tables in data lakes

Figure 3. Union-able tables in data lakes.

For this reason, we use a reference implementation to extract union-able tables, by clustering tables based on schema-names, and then present LLM with all tables in each cluster CC (with sample rows and statistical profiles in B(T)B(T) for each table T∈CT \in C), so that LLM can determine which subsets are union-able and along which attribute, which are documented like shown in column “Union-able tables (U)” of Figure 1.

Note that while our reference implementation for union-able tables focuses on schema-aligned table partitions, other existing union-search methods [9, 20, 25, 28, 35] can be readily plugged into our framework through the same interface to enhance its coverage.

Cost analysis. Because each table T∈LT \in\mathcal{L} can only fall into at most 1 cluster CC, each table will be scanned at most once by the LLM for union-able relationships. The per-table cost for union-able relationships is therefore c(U)=1c(U) = 1, which also grows linearly as the lake L\mathcal{L} grows.

Online: Agentic Tools for Data.Readme

In a large data lake L\mathcal{L} with thousands or millions of tables, even succinct DATA.README documentation like in Figure 1 can be large (e.g., it can have millions of entries with one for each table), which would be expensive to load entirely into an LLM agent’s context window indiscriminately, as it degrades both the agent’s latency and quality (e.g., lost in the middle [33]). We therefore develop a set of agentic tools [38, 41] to work with DATA.README, like illustrated in Figure 1(c). Today’s LLMs are capable of invoking these tools appropriately, to selectively load only a relevant subset of DATA.README, and follow observed relationship-pointers to navigate across related tables on demand. We describe a few core tools below in turn:

Get_readme_by_RAG_top_k(query, start_pos, k). This “RAG-top-k” tool takes a user input query, and compares its embedding with the row-wise embedding of all table entries in DATA.README to retrieve the top-k most relevant to the user query. By default we set start_pos = 0, and k=50k = 50 for agents to retrieve the first-50 matches, but the agent can always inspect the first-50 and if not finding relevant matches, retrieve the next kk by changing the start_pos parameter and invoke this tool again, which would retrieve the next batch of matches, etc.

Get_readme_by_table_names([table_list]). This “Retrieve-by-table-name” tool allows an agent to specifically retrieve a list of readme entries by name. It is useful because an agent may inspect an initial set of matches, find a relevant starting table TT, and then decide that there is a need to jump to another relevant table T′T' that may be confusable/joinable/union-able with TT for additional inspection (e.g., to see what T′T' actually contains, and what other tables T′T' can connect to). Invoking this tool allows LLMs to jump directly to these related tables by name.

Explore_table(table). This tool lets the agent actually open a table and explore data in a table, which agents can use for final verification or to resolve fine-grained details not present in DATA.README.

We also allow agents to use general python/sql tools, in addition to these readme-specific tools described above.

Example 3. We revisit Example 1 in Figure 1 to show how an agent may use these tools to navigate DATA.README. Suppose the input query is “global retail sales by customer country since 2024”, the agent first invokes Get_readme_by_RAG_top_k to retrieve the top-50 tables in readme that are the most similar to the query, which include many (but not all) Sales, Customer and Country tables in the lake. The agent inspects all returned tables’ readme entries, identifying Sales_1 as a possible candidate after reading fields such as “basic info (B)” and “confusable tables (C)” in the example.

From Sales_1, it may read its “joinable tables (J)” and “unionable tables (U)” fields and decide to navigate these connections, to Sales_14 (union-able with Sales_1 to answer the query), as well as Country_1 and Customer_9 (to join in order to answer the question). These additional tables may not be in the initial batch retrieved using RAG-top-k, in which case the agent can invoke Get_readme_by_table_names() to directly retrieve the readme for these tables using names.

Note that the “joinable tables (J)” field may contain more than 1 plausible join for an FK column, if semantic-validation (Line 9 of Algorithm 2) cannot uniquely identify one PK column to join with. In such cases readme has more than one join peers, which LLM can open and explore, to perform what we call a query-time “late-binding” to decide which plausible tables to actually bring in to answer user query. □

Data.Readme: Budget-Constrained Version

So far we studied how to extract relationships for all tables in a lake. We now consider the budget-constrained version in Definition 2.

Problem Formulation: BCTD

While our system described above can already process tables efficiently and in a cost-effective manner (costing as low as 1 cent per table), on really large lakes with millions of tables, and/or when a user has a fixed monetary budget BB, we can instead focus on a subset of tables that is expected to be the most beneficial.

Because users are unlikely to hand-pick or manually specify what tables are useful to index, we rely on a “query log” QLQL, that can be a set of historical jobs/scripts/sql-queries representative of future queries, which are often available [10, 54] and are leveraged in prior studies [49, 50].

Intuitively, from the QLQL, we can extract what tables are being used and at what frequency, which is a proxy for how important each table TT is, and how beneficial it may be to index TT. Let QL=(Q1,…,Qm)QL = (Q_1, \ldots, Q_m) be the query log, we use Ti⊆L\mathcal{T}_i \subseteq\mathcal{L} to denote the set of tables used by each QiQ_i (e.g., all tables accessed by this sql query or python script QiQ_i).

Given a monetary budget BB for indexing, and since Data.Readme is indexing tables at the table granularity (Figure 1), we reduce this to a table selection problem – namely, we want to select a subset of tables D⊆LD \subseteq\mathcal{L} for indexing, so as to maximize its possible benefit on QLQL.

On the cost side, for a selected table set DD, since each table populates the same fields and follows the same steps in § 3.2, the offline cost of processing each table in DD is similar and can be pre-determined as a constant kˉ\bar{k} (e.g., based on the average number of tokens consumed per table, and LLM token price). For a fixed budget BB, this means that the number of tables we can select in DD cannot exceed ⌊B/kˉ⌋\lfloor B/\bar{k}\rfloor, or ∣D∣≤⌊B/kˉ⌋|D| \leq\lfloor B/\bar{k}\rfloor.

On the utility side, for a selected table set DD that is indexed, the resulting readme is reliably beneficial for a query Qi∈QLQ_i \in QL, only if all tables accessed in QiQ_i, written as Ti\mathcal{T}_i, are contained in DD (as otherwise if a related table is missing from the readme, agents will likely have to fall back to brute-force exploration). We can therefore write the utility function as F(D)=∑i=1m1{Ti⊆D}F(D) = \sum_{i=1}^{m} \mathbb{1}\{\mathcal{T}_i \subseteq D\}, where 1{⋅}\mathbb{1}\{\cdot\} is the indicator function, and F(D)F(D) indicates how many queries in the query log QLQL can be “covered” by our selected tables D∈LD \in\mathcal{L}.

We are now ready to reduce the high-level problem stated in Definition 2, to an exact optimization problem below that we term Budget-Constrained Table Documentation, defined below:

Definition 3. Budget-Constrained Table Documentation (BCTD). Given a data lake L\mathcal{L}, a query log QL={Q1,…,Qm}QL = \{Q_1, \ldots, Q_m\}, the set of tables used by each of the queries {T1,…,Tm}\{\mathcal{T}_1, \ldots, \mathcal{T}_m\}, a total budget BB and a per-table processing cost kˉ\bar{k}, select a subset of tables D⊆LD \subseteq\mathcal{L}, such that:

max⁡D⊆L∑i=1m1{Ti⊆D}s.t.∣D∣≤⌊B/kˉ⌋(1)\begin{aligned} \max_{D \subseteq\mathcal{L}}\quad& \sum_{i=1}^{m} \mathbb{1}\{\mathcal{T}_i \subseteq D\}\\ \text{s.t.}\quad& |D| \leq\lfloor B/\bar{k}\rfloor \tag*{(1)} \end{aligned}

We first establish that BCTD is equivalent to Densest kk-Subhypergraph (DkSH) [15]. Using this equivalence, we develop a selection algorithm in the DkSH formulation and map its solution back to BCTD.

Lemma 1 (Equivalence to DkSH and Hardness). BCTD is polynomially equivalent to DkSH with repeated hyperedges counted by multiplicity. The reductions preserve the budget and objective, therefore BCTD is NP-hard.

Proof. To reduce BCTD to DkSH, create vertices V={vT:T∈L}V = \{v_T : T \in\mathcal{L}\} and one hyperedge ei={vT:T∈Ti}e_i = \{v_T : T \in\mathcal{T}_i\} per logged query QiQ_i. For a table set DD, let XD={vT:T∈D}X_D = \{v_T : T \in D\}. Then

∣XD∣=∣D∣,FH(XD)=∑i=1m1{ei⊆XD}=F(D),|X_D| = |D|,\quad F_H(X_D) = \sum_{i=1}^{m} \mathbb{1}\{e_i \subseteq X_D\} = F(D),

where FHF_H counts contained hyperedges, including repetitions.

Conversely, reduce DkSH to BCTD by creating one table per vertex and one logged query per hyperedge occurrence. Every vertex set XX maps to DX={T:vT∈X}D_X = \{T : v_T \in X\} with ∣DX∣=∣X∣|D_X| = |X| and F(DX)=FH(X)F(D_X) = F_H(X). Both constructions are polynomial in the explicit query/hyperedge incidences and preserve the budget and objective. We use the at-most-kk form, which has the same optimum as selecting exactly min⁡{k,∣V∣}\min\{k, |V|\} vertices because FHF_H is monotone.

Since ordinary DkSH is a special case and is NP-hard [7], BCTD is NP-hard. □

DensitySelect for BCTD

Based on Lemma 1, we use DkSH to develop an algorithm for BCTD. We first merge identical hyperedges and assign each its query multiplicity as a weight without changing FHF_H. We identify vertices with their tables and write FF for the common objective.

Selection algorithm. Because hyperedges can share vertices, selecting multiple hyperedges costs the size of their vertex union, not the sum of their individual sizes. We conservatively approximate this union cost with additive costs to obtain DensitySelect, an efficient density-based selection algorithm for BCTD.

We first discard queries touching more than kk tables and set aside empty-table queries, whose constant coverage is w0w_0. Merge identical hyperedges from the remaining queries into distinct nonempty hyperedges A1,…,AMA_1, \ldots, A_M, with weight wjw_j equal to the number of

Algorithm 3: DensitySelect: BCTD density-based selection
input : Candidate hyperedges $(A_j,w_j)_{j=1}^{M}$; vertex budget $k$
output : Selected vertices $D_{\mathrm{alg}}$
1 if $M=0$ then
2   return $\varnothing$;
3 Set $c_j \gets |A_j|$ and order hyperedges by nonincreasing $w_j/c_j$;
4 $D \gets \varnothing$; $b \gets 0$;
5 foreach $j$ in this order do
6   if $b+c_j\leq k$ then
7     $D \gets D\cup A_j$; $b\gets b+c_j$;
8 $j^\star \gets \arg\max_j w_j$;
9 return $\arg\max_{X\in\{D,A_{j^\star}\}}F(X)$;

queries represented by AjA_j. If M=0M=0, the empty selection is optimal. Otherwise, define

dT=∣{j:T∈Aj}∣,Δ=max⁡TdT,ℓ=max⁡j∣Aj∣.d_T=\left|\{j:T\in A_j\}\right|,\qquad\Delta=\max_T d_T,\qquad\ell=\max_j|A_j|.

Here Δ\Delta is the maximum number of candidate hyperedges incident to one vertex, and ℓ\ell is the maximum hyperedge size.

In DensitySelect shown in Algorithm 3, we assign each hyperedge the additive cost cj=∣Aj∣c_j=|A_j|. We then sort hyperedges by nonincreasing wj/cjw_j/c_j, admitting a hyperedge when the sum of admitted hyperedge costs remains at most kk, and skipping it otherwise. It compares the resulting vertex union with the vertex set of the highest-weight individual hyperedge, returning whichever covers more queries. Density and single-hyperedge weight ties use hyperedge index; the packed selection wins a coverage tie.

We show that DensitySelect in Algorithm 3 has the following approximation guarantee.

Lemma 2 (Approximation and running time). For the weighted hypergraph above, let F(D)F(D) denote the total weight of hyperedges contained in a vertex set DD, including the constant weight w0w_0 of empty hyperedges. Let OPT=max⁡∣D∣≤kF(D)\mathrm{OPT}=\max_{|D|\leq k}F(D). For M>0M>0, DensitySelect returns a set DalgD_{\mathrm{alg}} with ∣Dalg∣≤k|D_{\mathrm{alg}}|\leq k and F(Dalg)≥12ΔOPTF(D_{\mathrm{alg}})\geq\frac{1}{2\Delta}\mathrm{OPT}. Given the hyperedges, its running time is O(Mlog⁡M+Mℓ)O(M\log M+M\ell).

Proof. The packed union contains at most b≤kb\leq k vertices, and every candidate hyperedge has at most kk vertices. Thus either returned candidate is feasible.

Let D⋆D^\star be an optimal vertex set and let J⋆={j:Aj⊆D⋆}J^\star=\{j:A_j\subseteq D^\star\} index its covered hyperedges. Their additive cost satisfies

∑j∈J⋆cj≤Δ∣D⋆∣≤Δk.\sum_{j\in J^\star}c_j\leq\Delta|D^\star|\leq\Delta k.

Taking a 1/Δ1/\Delta fraction of each such hyperedge is therefore feasible for the fractional relaxation of the additive-cost problem over nonempty hyperedges with capacity kk. If VfracV_{\mathrm{frac}} denotes its optimum, then

Vfrac≥OPT−w0Δ.V_{\mathrm{frac}}\geq\frac{\mathrm{OPT}-w_0}{\Delta}.

If no hyperedge is rejected, every candidate hyperedge is contained in the packed union, so the selection is optimal. Otherwise, let rr be the first rejected hyperedge and PP the total weight admitted before it. In density order, the fractional solution consists of this prefix and at most a fraction of rr, so Vfrac≤P+wrV_{\mathrm{frac}}\leq P+w_r. The completed packing has value at least w0+Pw_0+P, while the highest-weight single-hyperedge candidate has value at least w0+wrw_0+w_r. The better candidate therefore satisfies

F(Dalg)≥w0+12(P+wr)≥w0+OPT−w02Δ≥OPT2Δ.F(D_{\mathrm{alg}})\geq w_0+\frac{1}{2}(P+w_r) \geq w_0+\frac{\mathrm{OPT}-w_0}{2\Delta} \geq\frac{\mathrm{OPT}}{2\Delta}.

Sorting takes O(Mlog⁡M)O(M\log M) time, while building the packed union and scoring the candidates takes O(Mℓ)O(M\ell), thus showing the O(Mlog⁡M+Mℓ)O(M\log M+M\ell) running time.

Finally, we map the returned vertices to their corresponding tables. The equivalence preserves the table budget and query log coverage, so for M>0M>0, Lemma 2 yields a feasible BCTD solution with at least a 1/(2Δ)1/(2\Delta) fraction of optimal coverage. Since M≤mM\leq m, its running time is also O(mlog⁡m+mℓ)O(m\log m+m\ell). Note that this algorithm uses only query-table incidence data and makes no LLM calls.

Experiments

We perform extensive evaluation to understand the effectiveness of Data.Readme on diverse tasks.

Data lakes. We create two experimental data lakes by pooling tables from public benchmarks BIRD [30], Spider [51], KramaBench [29] and BI-Bench [24]:

LakeOriginal: We pool all tables together from these 4 sources, and deduplicate at the table-level (as some public data sources are used by multiple benchmarks), which results in 4,127 tables. We refer to this as LakeOriginal.

LakeAugmented: To create an even larger and more challenging lake, we use LLM to synthesize group-by queries on randomly selected tables (to simulate user behaviors of performing aggregate analysis and then saving results [18]) to create 3,220 derived tables, and horizontally partitioned tables (to simulate partitioned-files that are common in data lakes [35, 43], e.g. in Figure 3) to create 5,482 tables. The resulting LakeAugmented contains 12,829 tables.

Table 1 summarizes the statistics of these lakes, and the offline construction costs to build Data.Readme on both lakes using all 6 backbone models tested. It can be seen that using open-source models like GPT-OSS-120B or DeepSeek-V4-Flash, the unit cost to process each table is as low as $0.01, making Data.Readme economically practical without any budget constraints.

Tasks. We evaluate 3 diverse data tasks using these data lakes:

Data discovery: In this task, an agent needs to identify tables in a lake relevant for a user query. We use queries in (BIRD, Spider, KramaBench, BI-Bench) as input, and measure exact-set match between the top-KK predicted tables and the ground-truth tables, where KK is the size of the ground-truth.

Data analysis: This task takes a user query and produces an answer using tables in a lake. We use queries in (BIRD, Spider, KramaBench, BI-Bench)1, and report accuracy [29, 30] by comparing the predicted answer with ground-truth answers from these benchmarks.

Data science: Given a table TT and a target column C∈TC\in T, in this task an agent needs to build a predictive-model (regression for numerical targets and classification for categorical targets) to best predict the target column CC. In a data lake setting, the agent can find additional external tables that may help improve prediction accuracy by joining or unioning into TT. We evaluate using a set of 16 classification and 45 regression tasks2, where we measure accuracy for classification tasks, and R2R^2 for regression tasks. We report gain recovery (GR), defined as GR = gain‾methodgain‾Gold×100%\frac{\overline{\mathrm{gain}}_{\mathrm{method}}}{\overline{\mathrm{gain}}_{\mathrm{Gold}}} \times100\%, which measures how much gain a method recovers on average (gain‾method\overline{\mathrm{gain}}_{\mathrm{method}}) relative to the average gain of a Gold method (gain‾Gold\overline{\mathrm{gain}}_{\mathrm{Gold}}) [13] that integrates all tables known to be related via joins/unions, followed by training using AutoGluon [19] to completion without a time limit.

LakeStatisticsConstruction cost (USD, per-table / total)
TablesAvg. rowsAvg. columnsAvg. cellsGPT-5.4GPT-5.4-miniGPT-5.4-nanoGPT-OSS-120BDeepSeek-V4-ProDeepSeek-V4-Flash
LakeOriginal4,12797,35914.71554,1250.299 / 1,2350.090 / 3710.024 / 1010.017 / 710.061 / 2530.015 / 63
LakeAugmented12,82947,49010.99294,8480.222 / 2,8540.067 / 8570.018 / 2330.013 / 1620.045 / 5800.011 / 145

Table 1. Data lake statistics and construction costs.

Baselines. We compare 12 representative methods from 4 categories below. Because tasks above like data discovery and analysis are interactive in nature, we place a 4-turn limit where LLMs can interact with the environment at most 4 times, to make latency acceptable, which is fair across all methods (as otherwise we observe some baselines like coding-agents can spend over an hour working on a data lake). We additionally compare results with no such turn-limit in our sensitivity studies.

(1) Cross-table annotation. ① This is our proposed Data.Readme method. We report results using the variant that extract relationships in all tables (§ 3.2) by default, and study the variant with budget (§ 4) in § 5.2.

(2) Per-table annotation. ① AutoDDG [53] is a representative method in the per-table category, that prompts LLM to generate semantic descriptions per table, without cross-table relationships.

(3) Table retrieval methods. Since we are operating on a data lake for table tasks where retrieval of relevant tables is a key step, we compare with existing table-retrieval methods. We configure each retrieval method in two settings: (i) one-shot where we feed the original query qq into the retrieval system, and directly use the returned top-KK tables from each method for downstream tasks (data discovery/analysis/science); and (ii) agentic where we give an LLM full autonomy to rephrase query qq and invoke the retrieval system multiple times as needed, which is similar to the tool-use setting of Data.Readme.

This produces a total of 8 baselines: ② BM25 [39] and ③ BM25 (agentic) for lexical retrieval, ④ Hybrid (RRF) [16] and ⑤ Hybrid (RRF) (agentic) for lexical/vector rank fusion, ⑥ LlamaIndex [32] and ⑦ LlamaIndex (agentic) for table-vector retrieval, ⑧ Pneuma [8] and ⑨ Pneuma (agentic) for table summary retrieval.

(4) Coding agents. Modern coding agents such as Claude Code [2], Codex CLI [3], and GitHub Copilot CLI [4], are capable across a broad range of tasks, making them strong baselines for comparison. We use GitHub Copilot CLI as a representative frontier coding agent. We evaluate it using the same 4-turn limit as other methods, labeled as ⑩ Coding agent; as well as ⑪ Coding agent (unlimited), where we give the coding agent an unfair advantage with unlimited turns, and allow it to explore the lake for as much as it wants. This serves as a really strong reference point for quality comparisons.

Backbone models. We evaluate all methods with 6 different backbone models, for a total of 12×6=7212 \times6 = 72 model/method combinations. When a backbone is selected, it is used consistently across all steps in each method, including offline processing/indexing and online querying. The models we tested include 3 proprietary models ① GPT-5.4; ② GPT-5.4-mini and ③ GPT-5.4-nano; and 3 open-weight models ④ GPT-OSS-120B, ⑤ DeepSeek-v4 Pro, ⑥ DeepSeek-v4 Flash. We use default reasoning and temperature settings for all models.

Other setups. We use OpenAI’s text-embedding-3-large for text embeddings. Local data processing and evaluation run on an Ubuntu 24.04 server with 96 vCPUs (AMD EPYC 7452) and 661 GiB of RAM; LLM inference uses cloud-hosted APIs.

Main Results: Quality Comparisons

Data discovery. Table 2 shows a comparison of all methods on quality, across all models (6), benchmarks (4), and lakes (2) combinations, for a total of 6×4×2=486 \times4 \times2 = 48 settings. Data.Readme outperforms all comparable baselines with the same turn-limit in 47 of 48 settings (with the remaining one being a tie). It significantly outperforms per-table annotation methods like AutoDDG, existing retrieval systems, and coding-agents.

Algorithm 2: Extract joinable relationships
input: Tables in a lake L\mathcal{L}
output: Candidate joins J\mathcal{J}
1P←∅\mathcal{P} \gets\emptyset; F←∅\mathcal{F} \gets\emptyset; J←∅\mathcal{J} \gets\emptyset;
2foreach T∈LT \in\mathcal{L} do
3(PT,FT)←(P_T, F_T) \gets LLM-inferred PK/FK on TT using B(T)B(T);
4P←P∪PT\mathcal{P} \gets\mathcal{P} \cup P_T; F←F∪FT\mathcal{F} \gets\mathcal{F} \cup F_T;
5Emb(P)←Emb(\mathcal{P}) \gets Embed P\mathcal{P} by (column names + sample values);
6foreach f∈Ff \in\mathcal{F} do
7Emb(f)←Emb(f) \gets Embed ff by (column names + sample vals);
8Cf←C_f \gets Retrieve top-NN PK in Emb(P)Emb(\mathcal{P}) using Emb(f)Emb(f), that pass PK/FK containment checks;
9Pf←P_f \gets LLM validates joined-sample, ranks semantically plausible top-kk;
10J←J∪{(f,p):p∈Pf}\mathcal{J} \gets\mathcal{J} \cup\{(f,p): p \in P_f\};
11return J\mathcal{J};

Table 2.

LakeAugmented is clearly more challenging, where all methods have lower scores. Data.Readme continues to show a substantial lead over all methods on this lake. Even against the “Coding agent (unlimited)” reference point (which enjoys an advantage of having unlimited LLM turns), Data.Readme achieves higher accuracy in 13 of the 16 settings.

Data analysis. Table 3 shows a similar comparison for data analysis, where Data.Readme achieves the highest score in 45 of 48 settings. As with data discovery, Data.Readme generally outperforms the strong Coding agent (unlimited). It is encouraging to see that Data.Readme using smaller backbones can often outperform baselines using stronger and more expensive backbones. We also note that on the challenging LakeAugmented, the lead of Data.Readme often widens compared to LakeOriginal.

Table 3: Data analysis scores (%). Each cell: LakeOriginal / LakeAugmented. For Coding agent, –/– denotes unavailable results because the corresponding model is not offered in Coding agent as a model option.

modelData.ReadmeAutoDDGPneumaPneuma (agentic)BM25BM25 (agentic)Hybrid (RRF)Hybrid (RRF) (agentic)LlamaIndexLlamaIndex (agentic)Coding agent (Copilot CLI)Coding agent (Copilot CLI, unlimited)
bird-paraphrase (NL2SQL)
gpt-5.443.3/43.836.7/31.119.7/13.230.2/22.116.0/10.726.9/22.126.1/19.536.2/26.623.6/15.734.0/25.84.8/5.328.9/26.9
gpt-5.4-mini32.1/32.428.9/22.516.7/11.221.5/14.712.9/8.619.5/12.120.7/15.026.3/19.717.0/13.924.6/15.94.5/5.323.5/19.0
gpt-5.4-nano31.4/29.626.0/19.210.9/8.414.5/9.411.7/7.915.4/10.916.2/12.222.8/16.916.0/12.121.8/15.5–/––/–
gpt-oss-120b_124.0/19.39.1/8.312.4/8.412.9/9.411.4/7.314.0/10.716.7/12.219.3/13.615.7/11.917.9/11.6–/––/–
deepseek-v4-pro37.9/39.028.9/23.68.6/7.120.0/14.49.1/6.119.7/11.711.9/10.125.6/21.010.7/8.824.8/17.4–/––/–
deepseek-v4-flash33.6/32.626.6/19.77.3/6.015.5/9.48.6/5.815.9/9.812.1/8.625.6/17.98.8/7.822.6/17.4–/––/–
spider-paraphrase (NL2SQL)
gpt-5.464.6/64.657.3/52.238.3/33.651.1/41.210.9/6.628.8/21.252.9/46.056.2/51.152.9/47.459.9/54.46.2/4.443.1/41.6
gpt-5.4-mini57.3/57.347.8/47.436.9/30.742.3/33.910.2/6.222.3/11.744.5/40.549.6/46.045.6/40.152.2/49.35.1/4.033.9/30.7
gpt-5.4-nano52.2/51.145.3/38.031.4/26.335.4/28.89.5/4.717.2/9.936.5/33.646.0/39.140.1/37.646.4/43.8–/––/–
gpt-oss-120b_144.5/40.129.2/28.133.9/25.537.6/29.68.4/5.818.2/9.539.8/33.936.9/35.440.9/36.541.2/36.9–/––/–
deepseek-v4-pro52.9/54.748.2/45.325.2/21.234.7/29.27.7/4.719.3/10.923.0/23.448.9/44.529.9/28.552.2/45.6–/––/–
deepseek-v4-flash56.2/50.446.7/44.521.9/16.835.0/24.85.1/4.49.1/5.119.0/20.445.6/41.222.3/23.746.4/40.9–/––/–
bibench (NL2SQL)
gpt-5.463.0/63.050.0/37.040.7/24.146.3/27.818.5/13.040.7/27.838.9/24.151.9/42.633.3/24.146.3/35.27.4/3.751.9/57.4
gpt-5.4-mini51.9/51.938.9/22.229.6/20.429.6/24.120.4/11.137.0/22.231.5/20.440.7/29.640.7/14.842.6/24.11.9/1.942.6/40.7
gpt-5.4-nano44.4/35.235.2/29.622.2/13.027.8/14.816.7/9.335.2/20.431.5/16.725.9/20.431.5/14.827.8/22.2–/––/–
gpt-oss-120b_144.4/40.79.3/9.325.9/13.022.2/7.416.7/7.431.5/16.729.6/22.229.6/24.133.3/16.725.9/20.4–/––/–
deepseek-v4-pro57.4/55.638.9/29.613.0/0.031.5/13.011.1/5.631.5/13.016.7/9.335.2/27.822.2/9.340.7/27.8–/––/–
deepseek-v4-flash50.0/50.042.6/18.57.4/1.927.8/14.811.1/9.322.2/14.813.0/7.438.9/27.811.1/5.637.0/25.9–/––/–
kramabench-paraphrase (NL2Python)
gpt-5.458.4/59.656.5/59.242.2/39.353.5/44.821.8/17.654.2/42.051.8/52.757.4/57.945.7/47.758.7/57.921.0/13.364.5/58.3
gpt-5.4-mini52.2/51.936.8/41.617.7/18.638.8/33.48.9/4.535.0/16.125.8/31.539.8/35.927.7/26.443.4/44.914.9/12.961.1/50.7
gpt-5.4-nano38.2/38.328.2/25.921.4/13.632.7/25.510.5/6.426.3/17.628.1/21.232.2/33.021.4/23.034.6/28.9–/––/–
gpt-oss-120b_135.6/30.816.0/7.118.3/13.824.1/15.09.0/10.715.2/13.722.3/24.825.2/22.721.4/19.129.0/26.9–/––/–
deepseek-v4-pro39.7/41.537.4/39.012.5/11.232.5/35.37.1/7.417.7/11.518.4/16.641.3/33.623.7/22.235.5/35.7–/––/–
deepseek-v4-flash39.3/41.331.5/21.515.4/19.126.3/22.87.4/3.122.6/4.913.5/14.740.2/33.414.0/14.028.8/31.6–/––/–

Table 3.

Data science. Figure 4 shows the quality comparison on data science tasks, where Data.Readme helps agents perform better on predictive modeling by leveraging related tables – it recovers 71.96% of gold model’s gains on classification, and 84.17% on regression. We additionally tested a method labeled as “Coding agent + Data.Readme”, shown as the rightmost method in the figure, where we provide our produced Data.Readme as an additional resource for the coding-agent. Compared to “Coding agent” without readme shown to its left, this readme-augmented coding-agent achieves substantial quality improvements – its gain recovery increases from 24.80% to 98.47% on classification and from 77.62% to 99.82% on regression, again showing the benefit of our using readme.

Data Science: average gain recovery (%)

Figure 4. Data Science: average gain recovery (%)

modelData.ReadmeAutoDDGPneumaPneuma (agentic)BM25BM25 (agentic)Hybrid (RRF)Hybrid (RRF) (agentic)LlamaIndexLlamaIndex (agentic)Coding agent (Copilot CLI)Coding agent (Copilot CLI, unlimited)
bird-paraphrase
gpt-5.474.7/51.764.5/37.64.1/0.250.9/26.42.3/0.844.7/28.413.6/4.460.1/39.112.5/1.658.1/34.314.8/7.472.6/53.0
gpt-5.4-mini57.0/37.449.6/20.95.7/0.739.6/20.52.3/0.830.5/15.113.6/4.445.0/26.112.5/1.644.0/25.58.7/4.450.1/31.4
gpt-5.4-nano57.3/35.848.3/18.24.4/0.334.3/14.82.3/0.827.8/12.213.6/4.441.4/23.812.5/1.639.7/23.8–/––/–
gpt-oss-120b_141.7/21.735.6/15.34.4/0.324.0/8.02.3/0.823.3/11.213.6/4.439.2/21.712.5/1.636.8/21.0–/––/–
deepseek-v4-pro66.8/46.351.2/25.14.4/0.336.9/13.32.3/0.831.4/19.713.6/4.446.1/27.112.5/1.647.5/25.3–/––/–
deepseek-v4-flash60.8/37.949.3/21.83.0/0.025.8/9.22.3/0.823.5/9.913.6/4.445.2/24.012.5/1.646.0/22.7–/––/–
spider-paraphrase
gpt-5.475.2/66.165.3/51.810.9/7.761.7/43.10.0/0.031.4/25.218.2/12.466.1/55.837.2/18.269.0/53.325.9/12.469.3/65.7
gpt-5.4-mini64.6/56.658.4/41.211.3/6.958.4/36.90.0/0.023.7/10.918.2/12.460.9/47.437.2/18.259.9/46.416.8/12.451.1/41.2
gpt-5.4-nano66.1/55.154.4/33.613.1/8.451.5/33.90.0/0.022.6/10.218.2/12.455.8/43.437.2/18.254.7/42.3–/––/–
gpt-oss-120b_158.0/42.748.5/28.113.1/6.643.4/29.20.0/0.021.5/11.318.2/12.448.5/38.737.2/18.255.5/41.2–/––/–
deepseek-v4-pro69.0/62.055.8/40.912.0/6.651.8/33.20.0/0.026.3/18.618.2/12.457.3/47.837.2/18.261.3/51.1–/––/–
deepseek-v4-flash64.6/55.856.9/45.611.7/6.243.8/26.60.0/0.014.2/6.918.2/12.455.5/50.037.2/18.260.2/49.3–/––/–
bibench
gpt-5.468.5/57.453.7/27.813.0/0.055.6/35.21.9/0.046.3/27.820.4/0.050.0/38.913.0/0.044.4/38.929.6/25.964.8/51.9
gpt-5.4-mini51.9/42.642.6/25.913.0/1.942.6/29.61.9/0.042.6/18.520.4/0.048.1/31.513.0/0.044.4/31.518.5/9.355.6/37.0
gpt-5.4-nano61.1/40.740.7/20.413.0/0.042.6/24.11.9/0.037.0/22.220.4/0.040.7/29.613.0/0.042.6/27.8–/––/–
gpt-oss-120b_159.3/46.327.8/14.816.7/0.048.1/16.71.9/0.040.7/22.220.4/0.044.4/29.613.0/0.037.0/24.1–/––/–
deepseek-v4-pro59.3/50.040.7/27.811.1/0.051.9/22.21.9/0.044.4/22.220.4/0.055.6/35.213.0/0.044.4/27.8–/––/–
deepseek-v4-flash59.3/50.044.4/18.511.1/0.040.7/18.51.9/0.048.1/11.120.4/0.051.9/33.313.0/0.048.1/31.5–/––/–
krambench-paraphrase
gpt-5.463.5/67.162.4/64.77.1/5.950.6/41.20.0/0.041.2/22.416.5/12.961.2/57.618.8/17.660.0/60.035.3/23.565.9/63.5
gpt-5.4-mini60.0/61.255.3/51.83.5/5.944.7/29.40.0/0.032.9/17.616.5/12.950.6/51.818.8/17.652.9/51.824.7/20.057.6/50.6
gpt-5.4-nano64.7/60.054.1/49.48.2/9.449.4/40.00.0/0.038.8/20.016.5/12.960.0/51.818.8/17.654.1/48.2–/––/–
gpt-oss-120b_155.3/51.848.2/40.09.4/4.728.2/24.70.0/0.030.6/20.016.5/12.954.1/47.118.8/17.649.4/45.9–/––/–
deepseek-v4-pro69.4/61.258.8/54.18.2/8.244.7/34.10.0/0.028.2/11.816.5/12.956.5/50.618.8/17.661.2/54.1–/––/–
deepseek-v4-flash61.2/63.552.9/47.110.6/7.132.9/28.20.0/0.016.5/4.716.5/12.957.6/49.418.8/17.655.3/54.1–/––/–

Table 2 (PDF p. 10). Data discovery exact match (%). Each cell: LakeOriginal / LakeAugmented. For Coding agent, –/– denotes unavailable results because the corresponding model is not offered in Coding agent as a model option.

Main Results: with Budget-Constraints

Figure 5 evaluates our proposed method, DensitySelect (Algorithm 3), for the budget constraint problem variant3, across different budget levels, with the table budget k=Bbˉ∈{10,50,100,150,175,200,250}k = \frac{B}{\bar{b}} \in\{10, 50, 100, 150, 175, 200, 250\}. We compare results from constrained configurations, against the full unconstrained version (AllAll).

DensitySelect scalability vs. budget

Figure 5. DensitySelect scalability vs. budget.

Discovery quality in end-to-end tasks. Figure 5(a) shows that we selectively process tables while retaining near-full discovery quality with substantially lower construction cost. At k=175k = 175, documenting 126 BIRD tables yields a 76.01% weighted Exact score, only losing 1.94% from All; whereas construction cost falls from 104.20104.20 to 22.1722.17. On Spider, 172 tables yield 84.08% versus 86.76%, a loss of 2.68 points, with cost falling from 141.23141.23 to $26.64, showing that

DensitySelect can indeed substantially reduce cost while maintaining quality.

Solution quality using the objective function. Figure 5(b) shows that DensitySelect can achieve near-optimal selection utility as defined in Equation (1). The dotted line is the true optimal utility (from brute-force enumeration), and the solid line is the utility of the solution produced by our algorithm, where our solution is close to theoretical optimum, showing the effectiveness of our approximation algorithm when measured by the raw objective function.

Solution scalability. Figure 5(c) shows that our algorithm runs efficiently and can scale to large query workloads as the query size grows – With k=200k = 200, median selection latency at m=10000m = 10000 is 12.50 ms on BIRD and 10.34 ms on Spider. The trend with mm is consistent with the O(mlog⁡m+mℓ)O(m \log m + m\ell) complexity discussed in Section 4.2.

Ablation Study

Coding Agent Ablation: with/without Readme. Given the strength and generality of today’s coding agents, we perform an additional test where we provide our produced Data.Readme to coding agent as an additional resource, and test its quality/latency comparisons with vs. without Readme, across different LLM-turn budget settings (1/4/8/16/unlimited).

Answer quality. Figure 6 shows that merely providing readme to a coding agent improves its answer quality at every tested budget setting across all four workloads. With 8 turns, Coding agent with readme improves its counterpart without readme significantly by 16 to 30 percentage points, even when both variants have unlimited turns, the one with readme still retains sizable benefits.

Coding-agent quality and latency with and without Data.Readme

Figure 6. Coding-agent quality and latency with and without Data.Readme.

Query latency. Importantly, the quality gains of readme are accompanied by higher-efficiency / reduced-latency in every setting, as readme allows the agent to perform tasks much more efficiently. With unlimited calls, the mean latency of using readme improve by up to 6x times, which represent significantly lower user wait time and better user experience.

Ablation of different relationships. In Figure 7, we evaluate how each relationship type extracted contributes to downstream task quality. Starting from Auto-DDG-like per-table table descriptions and profiles (referred to as Base), we add confusable tables (+C), joinable tables (+J), union-able tables (+U), as well as everything combined (+UCJ) and compare their quality results on benchmark queries involving multiple tables.

Ablation study of Data.Readme

Figure 7. Ablation study of Data.Readme.

The full method (+UCJ) achieves the best on all four workloads across tasks. The strongest individual component varies: +J leads on the SQL workloads, while +U leads or ties on KramaBench, which are dependent on the characteristics of the underlying workload.

Sensitivity and Efficiency

Sensitivity to embedding models. We replace the default embedding model, OpenAI’s text-embedding-3-large, with three lightweight embedding models that can run locally on CPUs: MiniLM-L6 [46], BGE-small [47], and E5-small [45]. Table 4 shows a comparison on discovery and analysis quality using LakeAugmented. With lightweight embedding models, Data.Readme performance drops by 2-4 percentage points, but is still significantly better than the best baseline, Hybrid RRF, on both tasks, illustrating that our quality gains are not dependent on big embedding models.

MethodDiscovery (%)Analysis (%)
Data.Readme + text-embedding-3-large60.5657.74
Data.Readme + all-MiniLM-L6-v256.6553.37
Data.Readme + bge-small-en-v1.558.5854.56
Data.Readme + e5-small-v258.5554.14
Best baseline - Hybrid RRF agentic47.8644.55

Table 4. Embedding-model sensitivity (%).

Construction Efficiency and Sensitivity. We measure offline construction cost/latency as the number and size of tables increase. To vary table count, we perform constructions on sampled subsets with 200, 400, 800, and 1,600 tables from LakeOriginal. Figure 8(a) reports elapsed construction time and LLM cost as we increase the number of tables, which grows linearly with the number of tables. We also vary the table size (the number of rows in a table), by selecting 100 tables from the lake each with at least 100K rows, and then down-sample each to 100, 1K, 10K, and 100K rows, respectively, and perform construction experiments. Figure 8(b) shows that LLM cost and latency are not sensitive to row count: increasing row count from 100 to 100K raises cost and latency only slightly, which shows the scalability of our approach to large tables and large lakes.

Construction time and estimated cost

Figure 8. Construction time and estimated cost: (a) total (s, USD); (b) per table (s/table, USD/table).

Incorporating code-to-table relationships

Historical SQL queries complement table metadata by providing examples of how tables are used [22], and can be attached to each table using the last column shown in Figure 1. We evaluate whether Data.Readme benefits from this additional context on BIRD and Spider in LakeAugmented. We use 80% of the queries to construct a historical query log QLQ_L and reserve the remaining 20% for evaluation. To integrate the knowledge of QLQ_L, We store each SQL in QLQ_L in the snippet field of the Data.Readme entry for every table it references. These examples are then available alongside retrieved Data.Readme.

Figure 9 shows that query history improves both Discovery Exact and SQL execution accuracy on BIRD and Spider. On BIRD, the gains are 5.79 and 4.13 percentage points, respectively. These gains suggest that historical queries provide useful context.

Query history improves data discovery and analysis

Figure 9. Query history improves data discovery and analysis.

Related work

Dataset annotation using LLMs. In addition to earlier work that uses traditional methods to expand the semantics of tables and columns [17, 26, 42, 48, 52], recent work such as AutoDDG [53] and TACO [11] use LLMs to generate dataset and column descriptions based on table content. Data.Readme addresses a different limitation: independently annotating each table does not explain relationships between tables. We therefore augment per-table descriptions with structured, lake-wide relationships and develop tools that let agents retrieve and traverse them, which are shown to improves the quality and efficiency of downstream data tasks.

Join discovery and search. There is a large literature on join discovery that aims to identify all joins from a set of tables, where most prior work focus on join discovery in smaller-scale, database settings, often with tens of tables [14, 36, 40, 55]. Scalable joinable-table search has also been studied using efficient value-overlap methods [57], where the goal is to find joinable tables for one target table. There is limited study thus far on scaling all-pair join discovery to large data lakes with tens of thousands of tables, while efficiently producing semantically plausible join relationships. Our setting additionally requires identifying and documenting semantically plausible PK/FK relationships across the lake, where value overlap alone may produce spurious connections.

Table union search. There is a long and fruitful line of research on table union search [9, 20, 25, 28, 35], which retrieves tables whose columns are semantically compatible to one target search table. While we use schema-aligned table partitions as a reference implementation for union-able relationships in this work, our focus is on documenting these relationships for downstream agents; alternative union-search methods could be easily plugged into Data.Readme using the same relationship interface.

Relationship-based data discovery. Systems like Aurum [21] construct and maintain a lake-wide graph of schema similarity, content similarity, and key relationships. Data.Readme shares the principle of precomputing lake-wide knowledge, but focuses on developing an explanatory documentation framework specifically designed for LLM agents, with new relationships such as confusable relationships, and extensible to new relationship types.

Conclusions and Future Work

We presented Data.Readme, structured documentation that helps LLM agents navigate large data lakes using offline relationship extraction. Our experiments show the promise of Data.Readme as reusable, relationship-aware documentation that can serve as an effective interface between data lakes and LLM agents.

References

References

  1. [1][n. d.]. AGENTS.md. https://github.com/agentsmd/agents.md. Accessed October 15, 2026.
  2. [2][n. d.]. Claude Code. https://claude.com/product/claude-code. Accessed October 15, 2026.
  3. [3][n. d.]. Codex CLI. https://learn.chatgpt.com/docs/codex/cli. Accessed October 15, 2026.
  4. [4][n. d.]. GitHub Copilot CLI. https://github.com/features/copilot/cli. Accessed October 15, 2026.
  5. [5][n. d.]. README. https://en.wikipedia.org/wiki/README. Accessed October 15, 2026.
  6. [6]Michael Armbrust, Tathagata Das, Liwen Sun, Burak Yavuz, Shixiong Zhu, Mukul Murthy, Joseph Torres, Herman Van Hövell, Adrian Ionescu, Alicja Łuszczak, et al. 2020. Delta lake: high-performance ACID table storage over cloud object stores. (2020).
  7. [7]Ashwin Arulsullivan. 2014. A note on the set union knapsack problem. Discrete Applied Mathematics 169 (2014), 214–218. doi:10.1016/j.dam.2013.12.015
  8. [8]Muhammad Ammar Luthfi Balaka, David Alexander, Qiming Wang, Yue Gong, Adila Krishnadhi, and Raul Castro Fernandez. 2025. Pneuma: Leveraging llms for tabular data representation and retrieval in an end-to-end system. Proceedings of the ACM on Management of Data 3, 3 (2025), 1–28.
  9. [9]Alex Bogatu, Alvaro A. Fernandez, Norman W. Paton, and Nikolaos Konstantinou. 2020. Dataset Discovery in Data Lakes. In 2020 IEEE 36th International Conference on Data Engineering (ICDE). 709–720. doi:10.1109/ICDE48307.2020.00067
  10. [10]Angela Bonifati, Wim Martens, and Thomas Tim. 2020. An analytical study of large SPARQL query logs: A. Bonifati et al. The VLDB Journal 29, 2 (2020), 655–679.
  11. [11]Ting Cai, Rakesh R. Menon, Yiru Chen, Zifan Liu, Yuan Tian, Fei Wu, Anudeep Chimakurthi, Prashanthi Ramamurthy, Sunav Choudhary, Kun Qian, and Yunyao Li. 2026. TACO: Task-Aware Column Description Generation Using LLMs. arXiv preprint arXiv:2606.21685 (2026). https://arxiv.org/abs/2606.21685
  12. [12]Shuaichen Chang, Jun Wang, Mingwen Dong, Lin Pan, Henghui Zhu, Alexander Hanbo Li, Wuwei Lan, Sheng Zhang, Jiaong Jiang, Joseph Lilien, Steve Ash, William Yang Wang, Zhiguo Wang, Vittorio Castelli, Patrick Ng, and Bing Xiang. 2023. Dr.Spider: A Diagnostic Evaluation Benchmark towards Text-to-SQL Robustness. In International Conference on Learning Representations. https://arxiv.org/abs/2301.08881
  13. [13]Surajit Chaudhuri and Vivek R Narasayya. 1997. An efficient, cost-driven index selection tool for Microsoft SQL server. In VLDB, Vol. 97. San Francisco, 146–155.
  14. [14]Zhimin Chen, Vivek Narasayya, and Surajit Chaudhuri. 2014. Fast foreign-key detection in Microsoft SQL Server Pivotor for Excel. Proceedings of the VLDB Endowment 7, 13 (2014), 1417–1428. doi:10.14778/2733004.2733014DOI
  15. [15]Eden Chlamtac, Michael Dinitz, Christian Konrad, Guy Kortsarz, and George Rabanca. 2018. The densest k-subhypergraph problem. SIAM Journal on Discrete Mathematics 32, 2 (2018), 1458–1477.
  16. [16]Gordon V Cormack, Charles LA Clarke, and Stefan Buettcher. 2009. Reciprocal rank fusion outperforms condorcet and individual rank learning methods. In Proceedings of the 32nd international ACM SIGIR conference on Research and development in information retrieval. 758–759.DOI
  17. [17]Eli Cortez, Philip A Bernstein, Yeye He, and Lev Novik. 2015. Annotating database schemas to help enterprise search. Proceedings of the VLDB Endowment 8, 12 (2015), 1936–1939. doi:10.14778/2824302.2824105DOI
  18. [18]Claudia Diamantini, Domenico Potena, and Emanuele Storti. 2026. Analytic processing in data lakes: a semantic query-driven discovery approach. Information Systems Frontiers 28, 2 (2026), 541–559. doi:10.1007/s10796-024-10471-4
  19. [19]Nick Erickson, Jonas Mueller, Alexander Shirkov, Hang Zhang, Pedro Larroy, Mu Li, and Alexander Smola. 2020. AutoGluon-Tabular: Robust and accurate automl for structured data. arXiv preprint arXiv:2006.0505 (2020).arxiv.org/abs/2003.06505
  20. [20]Grace Fan, Jin Wang, Yuliang Li, Dan Zhang, and Renée J. Miller. 2023. Semantics-aware Dataset Discovery from Data Lakes with Contextualized Column-based Representation Learning. Proceedings of the VLDB Endowment 16, 7 (2023), 1726–1739. doi:10.14778/3587136.3587146DOI
  21. [21]Raul Castro Fernandez, Ziawasch Abedjan, Famien Koko, Gina Yuan, Samuel Madden, and Michael Stonebraker. 2018. Aurum: A Data Discovery System. In 2018 IEEE 34th International Conference on Data Engineering (ICDE). 1001–1012. doi:10.1109/ICDE.2018.00094
  22. [22]Dawei Gao, Haibin Wang, Yaliang Li, Xiuyu Sun, Yichen Qian, Bolin Ding, and Jin-gren Zhou. 2023. Text-to-sql empowered by large language models: A benchmark evaluation. arXiv preprint arXiv:2308.15363 (2023).arxiv.org/abs/2308.15363
  23. [23]Ion Halevy, Flip Korn, Natalia F. Noy, Christopher Olston, Neoklis Polyzotis, Sudip Roy, and Steven Euijong Whang. 2016. GOODS: Organizing Google's Datasets. In Proceedings of the 2016 International Conference on Management of Data. 795–806. doi:10.1145/2882903.2903730DOI
  24. [24]Chuxuan Hu, Yeyee He, Penny Zhou, Wee Hyong Tok, Daniel Kang, and Surajit Chaudhuri. 2026. BI-Agent and BI-Bench: Towards Automating End-to-End Business Intelligence. arXiv preprint arXiv:2609.20886 (2026). https://arxiv.org/abs/2609.20886
  25. [25]Xuming Hu, Shen Wang, Xiao Qin, Chuan Lei, Zhengyuan Shen, Christos Faloutsos, Asterios Katsifodimos, George Karypis, Liljie Wen, and Philip S. Yu. 2023. Automatic Table Union Search with Tabular Representation Learning. In Findings of the Association for Computational Linguistics: ACL 2023. Association for Computational Linguistics, 3786–3800. doi:10.18653/v1/2023.findings-acl.233DOI
  26. [26]Madelon Hulsebos, Kevin Hu, Michiel Bakker, Emanuel Zgraggen, Arvind Satyanarayan, Tim Kraska, Çağatay Demiralp, and César Hidalgo. 2019. Sherlock: A Deep Learning Approach to Semantic Data Type Detection. In Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. 1500–1508. doi:10.1145/3292500.3330993DOI
  27. [27]Tengjun Jin, Yaojin Choi, Yuxuan Zhu, and Daniel Kang. 2026. Pervasive Annotation Errors Break Text-to-SQL Benchmarks and Leaderboards. arXiv preprint arXiv:2601.08778 (2026). doi:10.48550/arXiv.2601.08778DOI
  28. [28]Aamod Khatiwada, Grace Fan, Roee Shraga, Zixuan Chen, Wolfgang Gatterbauer, Renée J Miller, and Mirek Riedewald. 2023. Santos: Relationship-based semantic table union search. Proceedings of the ACM on Management of Data 1, 1 (2023), 1–25.arxiv.org/abs/2209.13589
  29. [29]Eugenie Lai, Gerardo Vitagliano, Ziyu Zhang, Om Chabra, Sivaprasad Sudhir, Anna Zeng, Anton A. Zabreyko, Chenning Li, Ferdi Kossmann, Jialin Ding, Jun Chen, Markos Markakis, Matthew Russo, Weiyang Wang, Ziniu Wu, Michael J. Cafarella, Lei Cao, Samuel Madden, and Tim Kraska. 2025. KramBench: A Benchmark for AI Systems on Data-to-Insight Pipelines over Data Lakes. arXiv preprint arXiv:2506.06541 (2025). doi:10.48550/arXiv.2506.06541DOI
  30. [30]Jinyang Li, Binyuan Hui, Ge Qu, Jiasi Yang, Binhua Li, Bowen Wang, Bowen Qin, Rongyu Cao, Ruiying Geng, Nan Huo, Xuanhe Zhou, Chenhao Ma, Guoliang Li, Kevin C. Chang, Fei Huang, Reynold Cheng, and Yongbin Li. 2023. Can LLM Already Serve as A Database Interface? A Big Bench for Large-Scale Database Grounded Text-to-SQLs. arXiv preprint arXiv:2305.03111 (2023). doi:10.48550/arXiv.2305.03111DOI
  31. [31]Peng Li, Yeye He, Dror Yashar, Weiwei Cui, Song Ge, Haidong Zhang, Danielle Rifski Fainman, Dongmei Zhang, and Surajit Chaudhuri. 2023. Table-gpt: Table-tuned gpt for diverse table tasks. arXiv preprint arXiv:2310.09263 (2023).arxiv.org/abs/2310.09263
  32. [32]Jerry Liu. 2022. Llamalndex. https://github.com/run-llama/llama_index. Accessed: 2026-10-15.
  33. [33]Nelson F Liu, Kevin Lin, John Hewitt, Ashwin Paran-jape, Michele Bevilacqua, Fabio Petroni, and Percy Liang. 2024. Lost in the middle: How language models use long contexts. Transactions of the association for computational linguistics 12 (2024), 157–173.arxiv.org/abs/2307.03172
  34. [34]Avanika Narayan, Ines Chami, Laurel Orr, Simran Arora, and Christopher Ré. 2022. Can foundation models wrangle your data? arXiv preprint arXiv:2205.09911 (2022).arxiv.org/abs/2205.09911
  35. [35]Fatemeh Nargesians, Erkang Zhu, Ken Q Pu, and Renée J Miller. 2018. Table union search on open data. Proceedings of the VLDB Endowment 11, 7 (2018), 813–825.DOI
  36. [36]Thorsten Papenbrock, Sebastian Kruse, Jorge-Arnulfo Quiané-Ruiz, and Felix Naumann. 2015. Divide & Conquer-based Inclusion Dependency Discovery. Proceedings of the VLDB Endowment 8, 7 (2015), 774–785. doi:10.14778/2752939.2752946DOI
  37. [37]Jin Qian, Yinan Li, Sahil Takiar, Ziyang Liu, Narasimha Veeramreddy, Min Tu, Ying Dai, Issac Buenrostro, Kapil Surlaker, Shirshanka Das, et al. 2015. Gobblin: Unifying data ingestion for Hadoop. Proceedings of the VLDB Endowment 8, 12 (2015), 1764–1769.
  38. [38]Changqiu Qu, Sunhao Jia, Xiaochi Wei, Hengyi Cai, Shuaixiang Wang, Dawei Jin, Jun Xu, and Ji-Rong Wen. 2025. Tool learning with large language models: A survey. Frontiers of Computer Science 19, 8 (2025), 198343.
  39. [39]Stephen E Robertson and Steve Walker. 1994. Some simple effective approximations to the 2-poisson model for probabilistic weighted retrieval. In SIGIR'94: Proceedings of the Seventeenth Annual International ACM-SIGIR Conference on Research and Development in Information Retrieval, organised by Dublin City University. Springer, 232–241.
  40. [40]Alexandra Rostin, Oliver Albrecht, Jana Bauckmann, Felix Naumann, and Ulf Leser. 2009. A Machine Learning Approach to Foreign Key Discovery. In 12th International Workshop on the Web and Databases (WebDB). https://hpi.de/oldsite/fileadmin/user_upload/fachgebiete/naumann/publications/PDFs/2009/rostin_a.pdf
  41. [41]Timo Schick, Jane Dwivedi-Yu, Roberto Dessi, Roberta Raileanu, Maria Lomeli, Eric Hambro, Luke Zettlemoyer, Nicola Cancedda, and Thomas Scialom. 2023. Toolformer: Language models can teach themselves to use tools. Advances in neural information processing systems 36 (2023), 6539–68551.arxiv.org/abs/2302.04761
  42. [42]Yoshihiko Suhara, Jinfeng Li, Yuliang Li, Dan Zhang, Çağatay Demiralp, Chen Chen, and Wang-Chiew Tan. 2022. Annotating Columns with Pre-trained Language Models. In Proceedings of the 2022 International Conference on Management of Data. 1493–1503. doi:10.1145/3514221.3517906DOI
  43. [43]Dezhan Tu, Yeye He, Weiwei Cui, Song Ge, Haidong Zhang, Shi Han, Dongmei Zhang, and Surajit Chaudhuri. 2023. Auto-validate by-history: Auto-program data quality constraints to validate recurring data pipelines. In Proceedings of the 29th ACM SIGKDD Conference on Knowledge Discovery and Data Mining. 4991–5003.
  44. [44]Haonan Wang, Jiaxiang Liu, Yurong Liu, Austin Senna Wijaya, Tianle Zhou, Eden Wu, Yijia Chen, Wanting You, Reva Vir, Daniela Pinto, et al. 2026. LakeQA: An Exploratory QA Benchmark over a Million-Scale Data Lake. arXiv preprint arXiv:2606.10460 (2026).arxiv.org/abs/2606.10460
  45. [45]Liang Wang, Nan Yang, Xiaolong Huang, Binxing Jiao, Linjun Yang, Daxin Jiang, Rangan Majumder, and Furu Wei. 2022. Text Embeddings by Weakly-Supervised Contrastive Pre-training. arXiv preprint arXiv:2212.03533 (2022). https://arxiv.org/abs/2212.03533
  46. [46]Wenhui Wang, Furu Wei, Li Dong, Hangbo Bao, Nan Yang, and Ming Zhou. 2020. MiniLM: Deep Self-Attention Distillation for Task-Agnostic Compression of Pre-Trained Transformers. In Advances in Neural Information Processing Systems, Vol. 33. Curran Associates, Inc., 5776–5788. https://proceedings.neurips.cc/paper_files/paper/2020/file/3f5ee243547dee91fdb05c31c4a845aa-Paper.pdf
  47. [47]Shitao Xiao, Zheng Liu, Peitian Zhang, and Niklas Muennighoff. 2023. C-Pack: Packaged Resources To Advance General Chinese Embedding. arXiv preprint arXiv:2309.07597v1 (2023). https://arxiv.org/abs/2309.07597v1
  48. [48]Cong Yan and Yeye He. 2018. Synthesizing type-detection logic for rich semantic data types using open-source code. In Proceedings of the 2018 International Conference on Management of Data. 35–50. doi:10.1145/3183713.3196888DOI
  49. [49]Cong Yan and Yeye He. 2020. Auto-suggest: Learning-to-recommend data preparation steps using data science notebooks. In Proceedings of the 2020 ACM SIGMOD International Conference on Management of Data. 1539–1554.DOI
  50. [50]Xiaoyan Yang, Cecilia M Procopiuc, and Divesh Srivastava. 2009. Recommending join queries via query log analysis. In 2009 IEEE 25th International Conference on Data Engineering. IEEE, 964–975.DOI
  51. [51]Tao Yu, Rui Zhan, Kai Yang, Michihiro Yasunaga, Dongxu Wang, Zifan Li, James Ma, Irene Li, Qingning Yao, Shanelle Roman, Zilin Zhang, and Dragomir Radev. 2018. Spider: A Large-Scale Human-Labeled Dataset for Complex and Cross-Domain Semantic Parsing and Text-to-SQL Task. In Proceedings of the 2018 Conference on Empirical Methods in Natural Language Processing. Association for Computational Linguistics, 3911–3921. doi:10.18653/v1/D18-1425DOI
  52. [52]Dan Zhang, Yoshihiko Suhara, Jinfeng Li, Madelon Hulsebos, Çağatay Demiralp, and Wang-Chiew Tan. 2020. SATO: Contextual Semantic Type Detection in Tables. Proceedings of the VLDB Endowment 13, 11 (2020), 1835–1848. doi:10.14778/3407790.3407793
  53. [53]Haoxiang Zhang, Yurong Liu, Aécio Santos, Wei-Lun Hung, and Juliana Freire. 2026. AutoDDG: Automated Dataset Description Generation using Large Language Models. Proceedings of the ACM on Management of Data 4, 1 (2026), 1–27. doi:10.1145/3786626DOI
  54. [54]Jian Zhang, Chaomei Chen, Michael S Vogely, Danny Pan, Ani Thakar, and Jordan Raddick. 2012. SDSS Log Viewer: visual exploratory analysis of large-volume sql log data. In Visualization and Data Analysis 2012, Vol. 8294. SPIE, 120–132.DOI
  55. [55]Meihui Zhang, Marios Hadjieleftheriou, Beng Chin Ooi, Cecilia M. Procopiuc, and Divesh Srivastava. 2010. On Multi-Column Foreign Key Discovery. Proceedings of the VLDB Endowment 3, 1–2 (2010), 805–814. doi:10.14778/1920841.1920944DOI
  56. [56]Yunjun Zhang, Jorden Henkel, Avrillia Fioradu, Joyce Cahoun, Shaleen Deep, and Jignesh M. Patel. 2024. ReAcTable: Enhancing ReAct for Table Question Answering. Proc. VLDB Endow. 17, 8 (April 2024), 1981–1994. doi:10.14778/3659437.3659452
  57. [57]Erkang Zhu, Dong Deng, Fatemeh Nargesian, and Renée J. Miller. 2019. JOSIE: Overlap Set Similarity Search for Finding Joinable Tables in Data Lakes. In Proceedings of the 2019 International Conference on Management of Data. 847–864. doi:10.1145/3299869.3330065DOI

Paper details

vlnc:W_8jgdyhzg
v1 · latestHistory (1)

published · Fresh — added to the Hub within the last 30 days

added ·

Usage

views · 0

downloads · 0

A view counts once per browser per day, a download each time the PDF is requested.

CC BY 4.0

Original source

  • Computer Science

Not recorded for this paper · View statement →

Looking for related papers…
Contents