<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Arunkumar Bhat</title>
    <description>The latest articles on DEV Community by Arunkumar Bhat (@arunkumarbhat88).</description>
    <link>https://dev.to/arunkumarbhat88</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1573458%2Fb383da38-2930-4f65-989b-6daa0f1f221b.jpg</url>
      <title>DEV Community: Arunkumar Bhat</title>
      <link>https://dev.to/arunkumarbhat88</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arunkumarbhat88"/>
    <language>en</language>
    <item>
      <title>Building a right-click 'query this file' workflow in VS Code with DuckDB</title>
      <dc:creator>Arunkumar Bhat</dc:creator>
      <pubDate>Mon, 20 Jul 2026 12:11:15 +0000</pubDate>
      <link>https://dev.to/arunkumarbhat88/building-a-right-click-query-this-file-workflow-in-vs-code-with-duckdb-12ja</link>
      <guid>https://dev.to/arunkumarbhat88/building-a-right-click-query-this-file-workflow-in-vs-code-with-duckdb-12ja</guid>
      <description>&lt;p&gt;Every data engineer has probably faced this workflow: someone shares a Parquet or CSV file, you need to answer one question, and you end up opening a notebook and writing boilerplate just to inspect it.&lt;/p&gt;

&lt;p&gt;DuckDB already makes querying files easy, but I wanted that workflow directly inside VS Code.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;File SQL&lt;/strong&gt;, a VS Code extension that turns local and S3 files into queryable SQL tables.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;Right-click a supported file in the VS Code Explorer and select &lt;strong&gt;Open with File SQL&lt;/strong&gt;. The file is registered as a DuckDB table, and the query editor opens next to it.&lt;/p&gt;

&lt;p&gt;Write SQL, press &lt;code&gt;Ctrl+Enter&lt;/code&gt;, and view the results without leaving VS Code.&lt;/p&gt;

&lt;p&gt;Supported formats include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CSV and TSV&lt;/li&gt;
&lt;li&gt;JSON, JSONL, and NDJSON&lt;/li&gt;
&lt;li&gt;Parquet&lt;/li&gt;
&lt;li&gt;TXT and log files&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Working with folders
&lt;/h2&gt;

&lt;p&gt;File SQL can also load local folders and S3 prefixes.&lt;/p&gt;

&lt;p&gt;Files are grouped into tables based on their folder structure, allowing multiple related files to be queried as one dataset.&lt;/p&gt;

&lt;p&gt;It also supports Hive-style partitioned datasets such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;events/
├── year=2025/
│   ├── month=01/
│   └── month=02/
└── year=2026/
    ├── month=01/
    └── month=02/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These partitions are exposed as a single table, with partition values available as columns.&lt;/p&gt;

&lt;h2&gt;
  
  
  Streaming Parquet files from S3
&lt;/h2&gt;

&lt;p&gt;The first version downloaded S3 files to a temporary location before querying them. That worked for smaller files but was inefficient for large Parquet datasets.&lt;/p&gt;

&lt;p&gt;File SQL now uses DuckDB's &lt;code&gt;httpfs&lt;/code&gt; support to query Parquet files directly from S3 using range reads.&lt;/p&gt;

&lt;p&gt;This allows DuckDB to take advantage of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Projection pushdown&lt;/li&gt;
&lt;li&gt;Predicate pushdown&lt;/li&gt;
&lt;li&gt;Partition pruning&lt;/li&gt;
&lt;li&gt;Reading only the required parts of a Parquet file&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Large files no longer need to be downloaded completely before querying.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shareable workspace configuration
&lt;/h2&gt;

&lt;p&gt;Teams often need the same tables and saved queries available across different machines.&lt;/p&gt;

&lt;p&gt;File SQL supports a workspace configuration under &lt;code&gt;.filesql/config.json&lt;/code&gt;. The configuration can be committed to Git so everyone working on the project can load the same data sources and queries.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tables"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"customers"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./data/customers.csv"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sales"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"s3://example-bucket/sales/"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When the workspace opens, File SQL can load the configured tables automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exporting query results
&lt;/h2&gt;

&lt;p&gt;Query results can be exported as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CSV&lt;/li&gt;
&lt;li&gt;Parquet&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is useful when a query produces a smaller dataset that needs to be shared or used by another tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Feedback
&lt;/h2&gt;

&lt;p&gt;File SQL is free and open source. I would appreciate feedback from anyone who regularly works with CSV, JSON, Parquet, or S3 data.&lt;/p&gt;

&lt;p&gt;What is missing, and what would make it more useful in your workflow?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/arunkumar1997/vscode-sql-files" rel="noopener noreferrer"&gt;https://github.com/arunkumar1997/vscode-sql-files&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Website: &lt;a href="https://arunkumar1997.github.io/vscode-sql-files/" rel="noopener noreferrer"&gt;https://arunkumar1997.github.io/vscode-sql-files/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Marketplace: &lt;a href="https://marketplace.visualstudio.com/items?itemName=arunkumar1997.file-sql" rel="noopener noreferrer"&gt;https://marketplace.visualstudio.com/items?itemName=arunkumar1997.file-sql&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>vscode</category>
      <category>duckdb</category>
      <category>sql</category>
      <category>dataengineering</category>
    </item>
  </channel>
</rss>
