diff --git a/hyper/benchmark.sh b/hyper/benchmark.sh index f61f185e49..a33527ee30 100755 --- a/hyper/benchmark.sh +++ b/hyper/benchmark.sh @@ -1,3 +1,3 @@ #!/bin/bash -export BENCH_DOWNLOAD_SCRIPT="download-hits-csv" +export BENCH_DOWNLOAD_SCRIPT="download-hits-parquet-single" exec ../lib/benchmark-common.sh diff --git a/hyper/create.sql b/hyper/create.sql index 3b376b0624..267a35b710 100644 --- a/hyper/create.sql +++ b/hyper/create.sql @@ -1,3 +1,7 @@ +create temp external table hits_parquet +for 'hits.parquet' +with (format => 'parquet', binary_as_text => true, immutable => true); + create table hits ( watchid bigint not null, javaenable smallint not null, @@ -106,3 +110,111 @@ create table hits ( clid integer not null, assumed primary key (counterid, eventdate, userid, eventtime, watchid) ); + +INSERT INTO hits SELECT +"WatchID", +"JavaEnable", +"Title", +"GoodEvent", +to_timestamp("EventTime") AS "EventTime", +(DATE '1970-01-01' + "EventDate"::integer) AS "EventDate", +"CounterID", +"ClientIP", +"RegionID", +"UserID", +"CounterClass", +"OS", +"UserAgent", +"URL", +"Referer", +"IsRefresh", +"RefererCategoryID", +"RefererRegionID", +"URLCategoryID", +"URLRegionID", +"ResolutionWidth", +"ResolutionHeight", +"ResolutionDepth", +"FlashMajor", +"FlashMinor", +"FlashMinor2", +"NetMajor", +"NetMinor", +"UserAgentMajor", +"UserAgentMinor", +"CookieEnable", +"JavascriptEnable", +"IsMobile", +"MobilePhone", +"MobilePhoneModel", +"Params", +"IPNetworkID", +"TraficSourceID", +"SearchEngineID", +"SearchPhrase", +"AdvEngineID", +"IsArtifical", +"WindowClientWidth", +"WindowClientHeight", +"ClientTimeZone", +to_timestamp("ClientEventTime") AS "ClientEventTime", +"SilverlightVersion1", +"SilverlightVersion2", +"SilverlightVersion3", +"SilverlightVersion4", +"PageCharset", +"CodeVersion", +"IsLink", +"IsDownload", +"IsNotBounce", +"FUniqID", +"OriginalURL", +"HID", +"IsOldCounter", +"IsEvent", +"IsParameter", +"DontCountHits", +"WithHash", +"HitColor", +to_timestamp("LocalEventTime") AS "LocalEventTime", +"Age", +"Sex", +"Income", +"Interests", +"Robotness", +"RemoteIP", +"WindowName", +"OpenerName", +"HistoryLength", +"BrowserLanguage", +"BrowserCountry", +"SocialNetwork", +"SocialAction", +"HTTPError", +"SendTiming", +"DNSTiming", +"ConnectTiming", +"ResponseStartTiming", +"ResponseEndTiming", +"FetchTiming", +"SocialSourceNetworkID", +"SocialSourcePage", +"ParamPrice", +"ParamOrderID", +"ParamCurrency", +"ParamCurrencyID", +"OpenstatServiceName", +"OpenstatCampaignID", +"OpenstatAdID", +"OpenstatSourceID", +"UTMSource", +"UTMMedium", +"UTMCampaign", +"UTMContent", +"UTMTerm", +"FromTag", +"HasGCLID", +"RefererHash", +"URLHash", +"CLID" +FROM hits_parquet; diff --git a/hyper/load b/hyper/load index 9c34e7d839..b3cd219b19 100755 --- a/hyper/load +++ b/hyper/load @@ -1,8 +1,8 @@ #!/bin/bash -# Create hits.hyper and COPY hits.csv into it, using the PERSISTENT Hyper +# Create hits.hyper and load hits.parquet into it, using the PERSISTENT Hyper # server started by ./start (descriptor in server.endpoint). Loading through # the already-running server avoids briefly running two hyperd instances -# (each of which would try to claim up to 80% of RAM) during the heavy COPY. +# (each of which would try to claim up to 80% of RAM) during the heavy load. set -e # shellcheck disable=SC1091 @@ -19,9 +19,11 @@ with open("server.endpoint") as f: endpoint = Endpoint(connection_descriptor=descriptor, user_agent="clickbench") with Connection(endpoint, 'hits.hyper', CreateMode.CREATE_AND_REPLACE) as connection: - connection.execute_command(open("create.sql").read()) - connection.execute_command("copy hits from 'hits.csv' with (format csv)") + # The Hyper API accepts one statement per execute_command call. + for command in open("create.sql").read().split(";"): + if command.strip(): + connection.execute_command(command) PY -rm -f hits.csv +rm -f hits.parquet sync diff --git a/hyper/results/20260814/c6a.4xlarge.json b/hyper/results/20260814/c6a.4xlarge.json new file mode 100644 index 0000000000..bc4bfd1f88 --- /dev/null +++ b/hyper/results/20260814/c6a.4xlarge.json @@ -0,0 +1,60 @@ +{ + "system": "Salesforce Hyper", + "date": "2026-08-14", + "machine": "c6a.4xlarge", + "cluster_size": 1, + "proprietary": "yes", + "hardware": "cpu", + "tuned": "no", + "tags": ["C++","column-oriented"], + "load_time": 283, + "data_size": 19076546560, + "concurrent_qps": 0.433, + "concurrent_error_ratio": 0.011, + "result": [ + [0.061, 0.007, 0.006], + [0.118, 0.011, 0.01], + [0.381, 0.031, 0.031], + [1.056, 0.03, 0.03], + [0.789, 0.586, 0.57], + [1.915, 0.152, 0.152], + [0.105, 0.002, 0.002], + [0.138, 0.01, 0.01], + [2.045, 0.747, 0.732], + [3.369, 0.826, 0.824], + [1.181, 0.051, 0.051], + [1.184, 0.055, 0.054], + [2.072, 0.291, 0.289], + [4.472, 0.731, 0.732], + [2.079, 0.303, 0.297], + [1.451, 0.698, 0.696], + [4.388, 1.02, 1.019], + [3.973, 0.612, 0.61], + [8.397, 2.081, 2.089], + [0.159, 0.002, 0.003], + [14.72, 0.3, 0.299], + [16.122, 0.301, 0.303], + [17.226, 0.207, 0.206], + [6.242, 0.038, 0.038], + [0.979, 0.009, 0.008], + [1.884, 0.049, 0.048], + [0.995, 0.008, 0.008], + [15.123, 0.463, 0.461], + [12.806, 7.086, 7.075], + [0.189, 0.021, 0.021], + [4.808, 0.248, 0.243], + [8.353, 0.43, 0.427], + [7.775, 3.658, 3.663], + [15.21, 1.384, 1.385], + [15.193, 1.369, 1.373], + [0.967, 0.61, 0.61], + [0.165, 0.011, 0.011], + [0.13, 0.006, 0.005], + [0.156, 0.004, 0.004], + [0.23, 0.021, 0.021], + [0.213, 0.002, 0.002], + [0.249, 0.004, 0.003], + [0.149, 0.005, 0.005] +] + } + \ No newline at end of file