Loading workbench page
Fetching primary parquet sources and computing exhibits.
Fetching primary parquet sources and computing exhibits.
How has world merchandise trade evolved in the BACI era, and what structural shifts has it been through? Ten figures: the level of world exports, the trade-to-GDP ratio, the sectoral composition, the concentration of exporters, the top-15 league table, growth dispersion 2019-2024, the thick-edge network of bilateral flows, the ranked bar view of the top-20 corridors, the within-basket product HHI for the top-15 exporters, and a 200-year frame that puts the last three decades in historical perspective.
SELECT year, SUM(total_exports)*1000 AS world_exports FROM 'data/parquet/country_year_totals.parquet' GROUP BY year ORDER BY year;
The ratio of trade (exports plus imports) to GDP is the canonical single-number measure of how globalized the world economy is. Subramanian & Kessler (2013, PIIE WP 13-6) named the 1990s-2010s run-up 'hyperglobalization' and dated its plateau to the aftermath of 2008-09.
Structural composition of world exports at the HS section level (goods only; note that Fig 2's WDI trade/GDP ratio covers goods + services). The twenty-one HS sections bundle the 5,115 six-digit product lines into coherent groups: machinery & electronics (section 16), mineral fuels (section 5), chemicals (6), vehicles (17), and base metals (15). Schott (2008,Economic Policy) documents within-product unit-value dispersion along the developing-country export rise; the chart below captures the coarser across-section picture.
The Herfindahl-Hirschman index across the 226 exporters answers whether the gains from three decades of globalization were diffuse or concentrated. Krugman's new trade theory (1980 QJE; 2009 Nobel lecture in AER 99(3)) and Melitz's (2003, Econometrica) 'new new' firm-heterogeneity framework jointly predict that, with scale economies and selection, liberalization can raise the dispersion of country market shares; Hanson (2012, JEP) documents China's outsized role in that reshuffling.
The HHI in Figure 4 is a scalar; the underlying league table is where the story lives. Fifteen countries account for roughly 60.6% of total world merchandise exports in 2024. That concentration is not a statistical artefact. It is the working geography of modern trade, and it is the set of reporters who define the HHI, the sectoral shares, and most of the bilateral flows on the rest of this site.
The level view in Figure 5 is a snapshot; the next question is who is accelerating and who is stalling. The five-year window 2019-2024 spans the COVID trade collapse, the 2021-22 rebound, the Russia-Ukraine commodity shock, and the US-China tariff rounds. Because it brackets a full supply-chain dislocation and recovery, it separates structural winners from countries whose terms of trade moved against them. We compute cumulative nominal-USD export growth for every reporter with at least USD 100M of exports in both years, then split the sample at the cross-country median.
The top-15 reporters in Figure 5 do not trade in isolation; most of their volume is carried on a few thick corridors. The figure below plots the top-30 country pairs by flow in 2024as a directed network over country centroids. Edge thickness is proportional to the bilateral value; thicker edges carry more trade. This is the 'core plumbing' view that Antràs (2020, JIE) calls the backbone of the global production network.
The network view in Figure 6 shows geography and clustering; the ranked bar view below shows how mucheach of the top-20 bilateral corridors actually carries. The top pair alone is typically larger than the 20th by more than an order of magnitude, which is the fat-tail that makes aggregate trade metrics so sensitive to a small number of relationships. Head & Mayer (2014, Handbook of International Economics) call this the 'distance-weighted mass' concentration that any gravity estimate has to fit.
Figure 4 measures concentration across countries (one HHI per year on country market shares). The complementary read is concentration withineach leader's basket: an HHI computed across HS6 product shares of that country's own export portfolio. The two HHIs do not have to move together: the world can stay diffuse across countries while individual baskets concentrate (commodity-dependence) or diversify (machinery upgrading). The contrast separates broad manufacturers from single-product commodity exporters in the same league table. Hesse (2008, World Bank Growth Commission WP 21) and Lederman & Maloney (2007, Natural Resources, Neither Curse nor Destiny) both flag within-basket HHI as the cleaner first-pass measure of export-base brittleness.
The BACI window starts in 1996, but the question of whether today is exceptionally globalized only makes sense against the long sweep. TRADHIST (Fouquin & Hugot 2016, CEPII) reconstructs bilateral trade and macro aggregates for 88-147 countries from 1827 to 2014. Two globalization peaks emerge: the Pax Britannica era before 1914 and the post-1980 hyperglobalization. O'Rourke & Williamson (1999) Globalization and History and Findlay & O'Rourke (2007) Power and Plenty are the standard references for interpreting these arcs.
Ten figures, one reading. World merchandise trade rose from $5.04T in 1996 to $22.83T in 2024in current USD; the globalization ratio plateaued after 2008 but the level remains historically unprecedented on the TRADHIST frame; machinery & electronics held roughly steady as a share while mineral fuels nearly doubled over thirty years; the concentration index barely moved despite China's rise, because China replaced mass in a tail that was already long. For country-level detail, see /country/<iso3>; for product detail, /product/<hs6>; for near-real-time reads, /monthly.
SELECT year, value AS trade_gdp_pct FROM 'data/parquet/wdi_data.parquet' WHERE iso3 = 'WLD' AND indicator = 'NE.TRD.GNFS.ZS' ORDER BY year;
WITH by_sec AS ( SELECT year, p.section, SUM(export_value) AS v FROM 'data/parquet/country_year_product/**/*.parquet' cyp JOIN products p USING (product_code) WHERE cyp.export_value > 0 GROUP BY year, p.section ) SELECT year, section, v / SUM(v) OVER (PARTITION BY year) AS share FROM by_sec ORDER BY year, section;
WITH s AS (
SELECT year, country_code,
total_exports / SUM(total_exports) OVER (PARTITION BY year) AS s
FROM 'data/parquet/country_year_totals.parquet' WHERE total_exports > 0
)
SELECT year, SUM(s*s) AS hhi, COUNT(*) AS n FROM s GROUP BY year ORDER BY year;SELECT c.iso3, COALESCE(ANY_VALUE(c.name) FILTER (WHERE c.name NOT LIKE '%(...%'), MIN(c.name)) AS name, SUM(t.total_exports) * 1000 AS exports_usd FROM 'data/parquet/country_year_totals.parquet' t JOIN 'data/parquet/countries.parquet' c ON c.code = t.country_code WHERE t.year = 2024 AND c.iso3 IS NOT NULL GROUP BY c.iso3 ORDER BY exports_usd DESC LIMIT 15;
WITH base AS (
SELECT c.iso3, COALESCE(ANY_VALUE(c.name) FILTER (WHERE c.name NOT LIKE '%(...%'), MIN(c.name)) AS name,
SUM(CASE WHEN t.year = 2019 THEN t.total_exports END) * 1000 AS exp_2019,
SUM(CASE WHEN t.year = 2024 THEN t.total_exports END) * 1000 AS exp_2024
FROM 'data/parquet/country_year_totals.parquet' t
JOIN 'data/parquet/countries.parquet' c ON c.code = t.country_code
WHERE t.year IN (2019, 2024) AND UPPER(c.iso3) = c.iso3
GROUP BY c.iso3
)
SELECT iso3, name,
(exp_2024 / NULLIF(exp_2019, 0) - 1) * 100 AS growth_pct
FROM base
WHERE exp_2019 > 100000000 AND exp_2024 > 100000000
ORDER BY growth_pct DESC;SELECT c1.iso3 AS src, c2.iso3 AS dst, SUM(b.total_value) * 1000 AS flow_usd FROM 'data/parquet/bilateral_year/year=2024/*.parquet' b JOIN 'data/parquet/countries.parquet' c1 ON c1.code = b.exporter_code JOIN 'data/parquet/countries.parquet' c2 ON c2.code = b.importer_code WHERE c1.iso3 <> c2.iso3 AND UPPER(c1.iso3) = c1.iso3 AND UPPER(c2.iso3) = c2.iso3 GROUP BY c1.iso3, c2.iso3 ORDER BY flow_usd DESC LIMIT 30;
SELECT c1.iso3 AS src, c2.iso3 AS dst, SUM(b.total_value) * 1000 AS flow_usd FROM 'data/parquet/bilateral_year/year=2024/*.parquet' b JOIN 'data/parquet/countries.parquet' c1 ON c1.code = b.exporter_code JOIN 'data/parquet/countries.parquet' c2 ON c2.code = b.importer_code WHERE c1.iso3 <> c2.iso3 AND UPPER(c1.iso3) = c1.iso3 AND UPPER(c2.iso3) = c2.iso3 GROUP BY c1.iso3, c2.iso3 ORDER BY flow_usd DESC LIMIT 20;
WITH basket AS (
SELECT cyp.country_code, cyp.product_code, SUM(cyp.export_value) AS v
FROM 'data/parquet/country_year_product/year=2024/*.parquet' cyp
JOIN 'data/parquet/countries.parquet' c ON c.code = cyp.country_code
WHERE c.iso3 IN (top-15 by latest export value) AND cyp.export_value > 0
GROUP BY cyp.country_code, cyp.product_code
),
shares AS (
SELECT country_code,
v / SUM(v) OVER (PARTITION BY country_code) AS s
FROM basket
)
SELECT country_code, SUM(s*s) AS hhi, COUNT(*) AS n_products
FROM shares GROUP BY country_code ORDER BY hhi DESC;SELECT year, avg_trade_gdp_ratio * 100 AS ratio_pct FROM 'data/parquet/historical_global.parquet' ORDER BY year;