hkjc_barrier_trials
Hong Kong barrier trial results, times and running comments
Download a file
CSV · Excel · Parquet · JSON. Filtered exports.
See pricingQuery with SQL
DBeaver, DuckDB, MotherDuck, or HTTPS. Sub-second latency.
Open connection detailsConnect to AI
MCP for Claude Desktop, Cursor, ChatGPT, Goose. 1-line install.
See setupHong Kong barrier trial (practice race) results — every horse's run in each morning trial batch at Sha Tin, Conghua and Happy Valley. Includes jockey, trainer, draw, gear, finishing order, time, lengths behind winner (LBW), running positions and the stewards' note on each horse's run. Barrier trials are how unraced and returning horses qualify and show form before the racecard, so this is early-signal data for spotting fitness and intent that the main results don't yet reveal.
Evaluate it in full below: the evidence and a working sample are open to everyone. Buy or subscribe to unlock the complete dataset — your account is created automatically at checkout.
The evidence
Rows over time
monthSchema & column quality (32 columns)
Scroll table sideways to see more columns →
| Column | Type | Description | Populated | Distinct |
|---|---|---|---|---|
| trial_date | Nullable(Date) | Date the barrier trial was run (YYYY-MM-DD) | — | — |
| venue | Nullable(String) | Trial venue — SHA TIN, CONGHUA or HAPPY VALLEY | — | — |
| track | Nullable(String) | Track surface used for the trial — TURF or ALL WEATHER TRACK | — | — |
| distance_m | Nullable(Int64) | Trial distance in metres (e.g. 1000, 1200, 1600) | — | — |
| batch_no | Nullable(Int64) | Batch (trial) number within the venue's session for that date | — | — |
| going | Nullable(String) | Going (track condition), e.g. GOOD, WET SLOW | — | — |
| batch_winning_time | Nullable(String) | Winning time for the batch as a whole, i.e. the time of the batch's fastest horse (M.SS.hh). The same for every runner in the batch — for this horse's own time, use horse_time. | — | — |
| batch_sectional_time | Nullable(String) | Section split times for the batch as a whole, in seconds, space-separated (e.g. '24.1 22.3 24.0'). The same for every runner in the batch. | — | — |
| finishing_position | Nullable(Int64) | The order HKJC lists this horse in for the trial (1 = first across the line). Barrier trials are not officially placed, so this is the running order as published: horses that dead-heat appear as consecutive positions rather than sharing one. | — | — |
| horse | Nullable(String) | Horse's name in English | — | — |
| brand_code | Nullable(String) | Horse's HKJC brand number (e.g. H294) | — | — |
| horse_id | Nullable(String) | Canonical horse identifier (HK_YYYY_XXXX format) | — | — |
| jockey | Nullable(String) | Jockey who rode the horse in the trial | — | — |
| trainer | Nullable(String) | Horse's trainer | — | — |
| draw | Nullable(Int64) | Barrier (gate) draw number for the trial | — | — |
| gear | Nullable(String) | Equipment carried (HKJC gear codes, e.g. B = Blinkers, TT = Tongue Tie). See gear_label for the decoded form. | — | — |
| gear_label | Nullable(String) | Equipment decoded to words, e.g. 'Visor (removed) / Blinkers (2nd time) / Tongue Tie'. 'No gear' where the raw code is '--'. Codes are HKJC's own (Equipment Register, racing.hkjc.com/en-us/local/page/reg-approved-gear); a trailing 1/2 means first/second time worn and a trailing '-' means removed this start. Unrecognised codes pass through unchanged. | — | — |
| lbw | Nullable(String) | Lengths behind winner (LBW) — distance behind the first-place finisher. Numeric margins carry an explicit unit suffix, e.g. '2L' (two lengths), '1/2L', '2-1/4L'. Sub-length margins are published as HKJC's abbreviations or words instead of a number: 'Neck', 'Head', 'Nose', 'SH' (short head). HKJC occasionally omits or mis-cases the 'L' at source; the unit is restored here so the numeric form is consistent, and the word margins are passed through as published. | — | — |
| running_position | Nullable(String) | Running positions through the trial, space-separated by section | — | — |
| horse_time | Nullable(String) | This horse's individual finishing time (M.SS.hh) | — | — |
| result | Nullable(String) | Trial result note (e.g. Passed for a qualifying trial), blank if none | — | — |
| comment | Nullable(String) | Stewards'/HKJC comment describing how the horse ran in the trial | — | — |
| batch_split_1_time | Nullable(Float64) | First section split time for the batch, in seconds (unpacked from batch_sectional_time). Same for every runner in the batch. | — | — |
| batch_split_2_time | Nullable(Float64) | Second section split time for the batch, in seconds (unpacked from batch_sectional_time). Same for every runner in the batch. | — | — |
| batch_split_3_time | Nullable(Float64) | Third section split time for the batch, in seconds (unpacked from batch_sectional_time). NULL if the batch had fewer than 3 splits. Same for every runner in the batch. | — | — |
| batch_split_4_time | Nullable(Float64) | Fourth section split time for the batch, in seconds (unpacked from batch_sectional_time). NULL if the batch had fewer than 4 splits. Same for every runner in the batch. | — | — |
| split_1_position | Nullable(Int64) | This horse's running position at the first split (unpacked from running_position). NULL if the horse was withdrawn or did not finish. | — | — |
| split_2_position | Nullable(Int64) | This horse's running position at the second split (unpacked from running_position). NULL if the horse was withdrawn or did not finish. | — | — |
| split_3_position | Nullable(Int64) | This horse's running position at the third split (unpacked from running_position). NULL if the trial had fewer than 3 splits, or the horse was withdrawn/did not finish. | — | — |
| split_4_position | Nullable(Int64) | This horse's running position at the fourth split (unpacked from running_position). NULL if the trial had fewer than 4 splits, or the horse was withdrawn/did not finish. | — | — |
| updated_at | Nullable(DateTime64(3)) | Timestamp this row was last (re)parsed into the warehouse | — | — |
| id | String | Stable unique identifier for this row — the last column of every export. Use it to deduplicate, to key an incremental load, or to reference one specific row. It is additive: the entity and join keys you already use (race_id, horse_id, and the like) are unchanged. | — | — |
Last 6 months of barrier trials — the same horses you will meet on the racecard, trialling before they run.
Choose your access
A Pass gives you freshness within a rolling window. The Full Archive gives you the full history we hold for the dataset, frozen at purchase. They solve different problems, and they work together.
- Access window
- Most recent 24 months, rolling
- Updates
- Continuous, within hours of the source
- Delivery
- API, SQL and downloads
- Exports
- 1,000,000 rows/month included
Included Datasets
- Access window
- Most recent 24 months, rolling
- Updates
- Continuous, within hours of the source
- Delivery
- API, SQL and downloads
- Exports
- Uncapped
Included Datasets
Get notified when this dataset is updated.
Questions about this data?
Our data experts are ready to help clarify any aspects of this dataset.
Contact Our Team