<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Parquet on Jonathan Franklin</title><link>https://jonnie.github.io/tags/parquet/</link><description>Recent content in Parquet on Jonathan Franklin</description><generator>Hugo</generator><language>en</language><lastBuildDate>Fri, 04 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://jonnie.github.io/tags/parquet/index.xml" rel="self" type="application/rss+xml"/><item><title>MT5 OHLCV Bars Pipeline</title><link>https://jonnie.github.io/work/mt5-ohlcv-pipeline/</link><pubDate>Fri, 04 Sep 2026 00:00:00 +0000</pubDate><guid>https://jonnie.github.io/work/mt5-ohlcv-pipeline/</guid><description>&lt;h2 id="problem"&gt;Problem&lt;/h2&gt;&#10;&lt;p&gt;Trading research needed reusable histories of one-minute open, high, low, close and volume bars. MetaTrader 5 held the source data, but its Windows terminal loaded symbol history on demand. Repeated manual exports made it awkward to retrieve consistent date ranges across symbols.&lt;/p&gt;&#10;&lt;h2 id="architecture"&gt;Architecture&lt;/h2&gt;&#10;&lt;p&gt;An hourly Monday-to-Friday job on a Windows EC2 instance retrieves M1 bars through the MT5 Python API. Bars are stored as compressed daily symbol/date partitions on S3, with monthly aggregates. A CLI reads selected partitions into a local cache and imports historical CSV exports into the same layout. Lambda scheduling, CloudWatch monitoring, Pulumi and PowerShell manage the runtime around the terminal.&lt;/p&gt;</description></item><item><title>Product Catalog Pipeline: Feeds to Products</title><link>https://jonnie.github.io/work/product-catalog-pipeline/</link><pubDate>Thu, 10 Dec 2020 00:00:00 +0000</pubDate><guid>https://jonnie.github.io/work/product-catalog-pipeline/</guid><description>&lt;h2 id="problem"&gt;Problem&lt;/h2&gt;&#10;&lt;p&gt;Pricesearcher needed to turn merchant feeds into a catalogue suitable for price comparison. Downloaded listings had to be normalised, assigned to the correct market and currency, and combined with reference data before indexing. Expansion into additional countries also required changes to feed processing, catalogue seeding and scheduling.&lt;/p&gt;&#10;&lt;h2 id="architecture"&gt;Architecture&lt;/h2&gt;&#10;&lt;p&gt;The ingestion stage processed merchant feeds into Parquet. A Spark product builder joined them with warehouse price history, categories, translated brands, linked product IDs and image-quality data, then supplied the &lt;a href="https://jonnie.github.io/work/search-index-pipeline/"&gt;search index pipeline&lt;/a&gt;. Country-specific processing and schedules ran through the same flow.&lt;/p&gt;</description></item></channel></rss>