16 | In 2008 and under the guidance of professors Alfons Kemper and Thomas Neumann, the journey of Hyper
17 | started as a research project at the Technical University of Munich
18 | . Strictly speaking, Hyper was then written HyPer with a capital P as an acronym for "
19 | Hybrid High Performance". As part of the Tableau acquisition
20 | in 2016, HyPer became Hyper. Legend has it that{' '}
21 |
22 | a popular 90's techno song called Hyper Hyper
23 | {' '}
24 | had influenced the name finding, but that is in the realm of urban myths.
25 |
26 |
27 | } date="over the next years">
28 |
Hyper's Success in Academia
29 |
30 |
31 | More than 50 peer-reviewed articles about Hyper
32 | {' '}
33 | have been published in journals as well as in the proceedings of various database conferences and
34 | workshops. Several of these publications and demos have received awards, including awards at the
35 | prestigious IEEE ICDE, ACM SIGMOD, and VLDB conferences. We are especially honored that two of our
36 | foundational publications have received the test of time award, one of the highest distinctions in
37 | the database research community:
38 |
57 | "
58 |
59 | Efficiently Compiling Efficient Query Plans for Modern Hardware
60 |
61 | ", published in the proceedings of the 37th International Conference on Very Large Data
62 | Bases 2011 (VLDB 2011), has received the VLDB 2021 Test of Time Award. This publication
63 | describes the foundation of Hyper's compiling query execution engine and was the first
64 | to introduce data-centric code generation and compilation for query processing on modern
65 | hardware. The then-novel technique that Thomas Neumann had pioneered in Hyper has been
66 | adopted by many of the leading database engines over the past decade. Alongside vectorized
67 | query processing, query compilation is one of the two state-of-the-art processing paradigms
68 | for fast query processing.
69 |
70 |
71 |
72 |
73 | } date="2015">
74 |
Hyper Startup
75 |
76 | In 2015, the six co-founders Dr. Jan Finis, Prof. Alfons Kemper, Ph.D., Prof. Dr. Viktor Leis, Dr.
77 | Tobias Muehlbauer, Prof. Dr. Thomas Neumann, and Dr. Wolf Roediger founded the Hyper spinoff startup
78 | with the mission to develop a database that disrupts the way people manage and analyze data on
79 | modern hardware.
80 |
95 | In January 2018 and after 18 months of integration,{' '}
96 |
97 | Tableau shipped version 10.5 of its products, all powered by Hyper as its new data engine
98 |
99 | . With Hyper's ability to slice and dice massive volumes of data in seconds, Tableau customers
100 | got up to 5X faster query speeds and up to 3X faster extract creation speeds compared to the
101 | previous Tableau data engine. This allowed faster insights for even larger data sets, giving
102 | organizations the ability to scale their analysis to more people. Later in 2018,{' '}
103 |
104 | Tableau launched its novel Prep product powered by Hyper as its data processing engine
105 |
106 | . Prep delivered new data preparation capabilities that brought a direct and visual experience. Data
107 | prep was made simple and the integration with the Tableau analytical workflow allowed people to get
108 | insights from their cleaned and enriched data sets even faster.
109 |
110 |
111 | } date="2019">
112 |
Launch of Hyper API
113 |
114 | In 2019, Tableau launched Hyper API. The API allows customers and partners to
115 | automate their integrations with Tableau extracts, including the creation of new extract files as
116 | well as inserting, deleting, updating, and reading data from existing extracts. Hyper API was the
117 | first solution to expose Hyper's SQL capabilities to Tableau's end customers and partners.
118 |
143 | from a research project towards an industry-hardened database
144 |
145 |
146 |
147 |
148 |
149 |
150 | >
151 | );
152 | }
153 |
--------------------------------------------------------------------------------
/website/docs/hyper-api/hyper_process.md:
--------------------------------------------------------------------------------
1 | # The `HyperProcess`
2 |
3 | Hyper itself is a full-fledged, standalone database server (`hyperd`).
4 | Hyper API comes bundled with `hyperd` together with a utility class (`HyperProcess`) which allows you to spawn the Hyper database server locally on your machine.
5 |
6 | To spawn a Hyper process, use:
7 |
8 | ```python
9 | from tableauhyperapi import HyperProcess, Telemetry
10 |
11 | with HyperProcess(telemetry=Telemetry.SEND_USAGE_DATA_TO_TABLEAU) as hyper:
12 | print(hyper.endpoint)
13 | ```
14 |
15 | This starts up a local Hyper database server, and then prints the connection string (`endpoint`).
16 | This connection string describes the used protocol (TCP, domain sockets, ...) and the corresponding information like port numbers.
17 | The `Connection` class can then be used to connect against this endpoint.
18 | While the `HyperProcess` is running, you can create and connect to as many `.hyper` files as you want.
19 |
20 | After you no longer need a Hyper database server, you should shutdown the `HyperProcess`.
21 | If you call the `HyperProcess` in a `with` statement (Python), `using` statement (C#), scope (C++), or `try-with-resources` statement (Java), the `hyperd` process will safely shutdown automatically at the end of the `with` statement.
22 |
23 | ## Performance best practices {#performance}
24 |
25 | Compared to other database systems, Hyper starts up very fast (in the order of 100 milliseconds).
26 | Still, starting up and shutting down the server takes time.
27 | Hence, you should keep the process running and only close or shutdown the `HyperProcess` when your application is finished.
28 | E.g., when updating multiple tables inside a `.hyper` file, do not restart the `HyperProcess` for every table, but instead use the same process for updating all of your tables.
29 |
30 | Furthermore, you should only have one instance of Hyper running at any given time.
31 | Hyper internally monitors its memory assumption, and makes sure that it only uses up to 80% of your system's RAM memory, such that your overall system stays responsive.
32 | If multiple Hyper processes are running at the same time, they might overload the system, and Hyper's internal resource management mechanisms will not be able to counteract this.
33 |
34 | ## Telemetry Data {#telemetry}
35 |
36 | The `HyperProcess` can be instructed to send telemetry on Hyper API usage to Tableau.
37 | To send usage data, set `telemetry` to `Telemetry.SEND_USAGE_DATA_TO_TABLEAU` when you start the process.
38 | To opt out, set `telemetry` to `Telemetry.DO_NOT_SEND_USAGE_DATA_TO_TABLEAU`.
39 |
40 | To help us improve Hyper and justify further investments into Hyper API, you can share usage data with us.
41 | Tableau collects data that helps us learn how our products are being used so we can improve existing features and develop new ones.
42 | All usage data is collected and handled according to the [Tableau Privacy Policy](https://tableau.com/privacy).
43 |
44 | ## Locating the `hyperd` binary
45 |
46 | To spawn the `hyperd` executable, `HyperProcess` must be able to locate this binary, first.
47 | By default, `HyperProcess` is able to automatically find the `hyperd` executable bundled inside Hyper API.
48 | However, if you are rebundling Hyper API, this logic might fail.
49 | In those cases, you can use the `hyper_path` parameter to explicitly specify the location of the folder (!) containing the `hyperd` binary (not the path to the binary itself!).
50 |
51 | ```python
52 | from tableauhyperapi import HyperProcess, Telemetry
53 |
54 | HyperProcess(telemetry=Telemetry.DO_NOT_SEND_USAGE_DATA_TO_TABLEAU,
55 | hyper_path="/home/avogelsgesang/development/hyper/build/bin") as hyper:
56 | print(hyper.endpoint)
57 | ```
58 |
59 | :::note For internal prototyping
60 |
61 | Using the `hyper_path`, you can also instruct Hyper API to interact with a different version of `hyperd`.
62 | Thereby, you can use Hyper API to quickly script a benchmark or more extensive test cases for your
63 | new feature or performance improvement.
64 |
65 | :::
66 |
67 | ## Process Settings {#process-settings}
68 |
69 | The behavior of the Hyper process can be customized using a couple of settings.
70 | They influence all connections to Hyper.
71 | Those settings can be set during startup of the process through the `parameters` argument of the `HyperProcess`:
72 |
73 | ```python
74 | process_parameters = {"default_database_version": "2"}
75 | with HyperProcess(telemetry=Telemetry.SEND_USAGE_DATA_TO_TABLEAU,
76 | parameters=process_parameters) as hyper:
77 | print(hyper.endpoint)
78 | ```
79 |
80 | ### Connectivity Settings {#connectivitysettings}
81 |
82 | These settings control how Hyper communicates with its clients.
83 |
84 | #### domain_socket_dir
85 |
86 | Specifies the directory that Hyper uses for domain sockets. It only has
87 | an effect if Hyper uses domain sockets (using domain sockets is the
88 | default behavior, see [use_tcp_port](#use_tcp_port)).
89 |
90 | Default value: `/tmp`
91 |
92 | :::note
93 | This setting has no effect on Windows machines.
94 |
95 | The maximum path length for valid domain sockets is limited on many
96 | platforms. It is therefore recommended to use a short path as the domain
97 | socket directory.
98 | :::
99 |
100 | #### use_tcp_port
101 |
102 | If this setting is set to a port number or the special `auto` value,
103 | Hyper will use the TCP protocol to communicate with clients. If `auto`
104 | is passed, Hyper will automatically pick an available port. Otherwise,
105 | the passed port number is used. If this setting is set to `off`, which
106 | is the default value, Hyper will use named pipes on Windows and domain
107 | sockets on Linux and macOS.
108 |
109 | If TCP communication is desired, it is recommended to use the automatic
110 | port detection by passing `auto` instead of an explicit port.
111 |
112 | Default value: `off`
113 |
114 | Accepted values: `auto`, `off` or a port number between 1 and 65535
115 |
116 | ### Logging Settings {#loggingsettings}
117 |
118 | These settings control how Hyper writes its activity logs.
119 | Note that these setting controls the activity log of Hyper and not a transactional
120 | write-ahead log.
121 |
122 | #### log_config
123 |
124 | Can be used to disable Hyper's logging by setting it to the empty
125 | string. By default, logging is enabled.
126 |
127 | #### log_dir
128 |
129 | Specifies the directory into which Hyper's log files will be written.
130 |
131 | #### log_file_max_count
132 |
133 | Specifies how many Hyper log files are kept until the oldest ones are
134 | deleted. This setting only has an effect if multiple log files will be
135 | created (see: [log_file_size_limit](#log_file_size_limit)). For example,
136 | if `log_file_max_count` is set to `2` and
137 | [log_file_size_limit](#log_file_size_limit) is set to `100M`, there will
138 | be at most two log files with a file size of up to 100 MB containing the
139 | most recent log information.
140 |
141 | It is not recommended to set the limit to `1`, since this can lead to
142 | situations in which very little log information is available. This is
143 | because the old log file will be deleted immediately when a new log file
144 | is started.
145 |
146 | When set to `0`, the number of log files is not limited.
147 |
148 | Default value: `0`
149 |
150 | #### log_file_size_limit
151 |
152 | Specifies how large a Hyper log file is allowed to grow before logging
153 | switches to a new log file. When this setting is set to a value greater
154 | than zero, the log files will be suffixed with a timestamp indicating
155 | the time at which the logging into this file started. The setting\'s
156 | value can be specified in `K`(KB), `M`(MB), `G`(GB) or `T`(TB) units.
157 | For example, you can specify `100M` to limit the file size of each log
158 | file to 100 MB. A limit on how many log files should be kept around can
159 | be specified with [log_file_max_count](#log_file_max_count).
160 |
161 | When set to `0`, the log file size is not limited and no timestamps are
162 | added to the log file name.
163 |
164 | Default value: `0`
165 |
166 | ### Database Settings {#databasesettings}
167 |
168 | These settings control Hyper's database files.
169 |
170 | #### default_database_version
171 |
172 | Specifies the default database file format version that will be used to
173 | create new database files.
174 | Every version builds on the improvements of the previous version(s) and
175 | adds some new functionality, like new data types.
176 |
177 | Default value: `2`
178 |
179 | Accepted values: `0`, `1` (writing this version is deprecated in favor
180 | of version 2 and will be removed in a future Hyper API release), `2`, `3`, and `4`.
181 |
182 | :::note
183 | Newer database file format versions than the initial version `0` are
184 | unsupported in older product versions. This means that you can use newer
185 | database versions with the latest Hyper API and newer product versions
186 | but you cannot open them in older product versions. For example, the
187 | database file format version `2` can be opened in Tableau Desktop
188 | 2020.4.15 but it cannot be opened in Tableau Desktop 2020.3. The
189 | complete compatibility matrix is documented in the version sections
190 | below.
191 |
192 | Opening a database file with an unsupported
193 | Tableau product version will produce an error message similar to:
194 |
195 | "There was an error during loading database '[...]/file.hyper':
196 | unsupported version 3 (max supported version: 2). To open this database,
197 | please update your product. (error code 0AS01)"
198 | :::
199 |
200 |
201 | ##### version 0
202 |
203 | The default and initial database file format version is version `0`. It
204 | is supported by all product versions. To create a new Hyper database
205 | file with this version, set `default_database_version=0`.
206 |
207 | ##### version 1 (deprecated)
208 |
209 | Database file format version `1` improves Hyper's file format
210 | significantly. It contains a collection of improvements from the years
211 | since Hyper's initial release:
212 |
213 | - Hyper will compress database files more efficiently after rows have
214 | been deleted. The initial file format was not able to compress data
215 | blocks with deleted rows, so the file size increased significantly
216 | when rows were deleted.
217 |
218 | - Hyper will process queries on textual data with collations more
219 | efficiently.
220 |
221 | - Hyper will detect database files that have been corrupted externally
222 | more reliably.
223 |
224 | To create a new Hyper database file with this version, set
225 | `default_database_version=1`. Note: Writing file version 1 is deprecated
226 | and will be removed in a future Hyper API release.
227 |
228 | :::note
229 | The database file format version `1` is supported by Tableau
230 | Desktop/Server 2019.2.10, 2019.3.6, 2019.4.5, 2020.1.1 and newer product
231 | versions. It is supported by Tableau Prep 2020.2 and newer versions.
232 | :::
233 |
234 | ##### version 2
235 |
236 | Database file format version `2` adds support for storing and querying
237 | textual data with arbitrary versions of the Unicode collation tables.
238 |
239 | To create a new Hyper database file with this version, set
240 | `default_database_version=2`.
241 |
242 | :::note
243 | The database file format version `2` is supported by Tableau
244 | Desktop/Server 2020.4.15, 2021.1.12, 2021.2.9, 2021.3.8, 2021.4.4,
245 | 2022.1.2 and newer product versions. It is supported by Tableau Prep
246 | 2022.3 and newer versions.
247 | :::
248 |
249 | ##### version 3
250 |
251 | Database file format version `3` supports storing and querying 128-bit
252 | numerics. 128-bit numerics support a precision of up to 38 places.
253 | Additionally, file format `3` improves compression of all 128-bit data types.
254 |
255 | To create a new Hyper database file with this version, set
256 | `default_database_version=3`.
257 |
258 | :::note
259 | The database file format version `3` is supported by Tableau Desktop
260 | 2022.4.1 and Server 2023.1 and newer product versions. It is supported by
261 | Tableau Prep 2022.4.1 and newer versions.
262 | :::
263 |
264 | #### version 4
265 | Database file format version `4` was introduced to support
266 | persisting and reading the new 32-bit floating point type.
267 |
268 | Starting with release 0.0.19484, Hyper uses 32-bit floats for
269 | the SQL types `real`, `float4`, and `float(p)` with `p <= 24`.
270 | The types `double precision`, `float`, `float8`, and `float(p)` with `p >= 25`
271 | still use 64-bit doubles.
272 |
273 | To create a new Hyper database file with this version, set
274 | `default_database_version=4`.
275 |
276 | :::note
277 | The database file format version `4` will be supported
278 | by Tableau Desktop/Server/Prep 2024.3 and newer product versions.
279 | :::
280 |
281 |
299 |
--------------------------------------------------------------------------------
/website/static/img/hyper-social-card.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
223 |
--------------------------------------------------------------------------------
/website/docs/releases.md:
--------------------------------------------------------------------------------
1 | # Releases
2 |
3 | Below you can find the latest downloads and the new functionalities and bug fixes which shipped with each version.
4 |
5 | ## Download {#download}
6 |
7 | ```mdx-code-block
8 | import {config} from '@site/src/config';
9 | ```
10 |
11 |
The latest available version is v{config.version_short}.
12 |
13 | ```mdx-code-block
14 | import {DownloadPicker} from '@site/src/components/DownloadPicker'
15 |
16 |
17 | ```
18 |
19 | ## Release Notes
20 |
21 | :::note
22 |
23 | In case you are wondering why all our releases start with `0.0`, read [this FAQ entry](/docs/faq#why-does-hyperapi-only-have-00-versions).
24 |
25 | :::
26 |
27 | ### 0.0.24081 [December 11 2025]
28 | * Added support for two new SQL functions:
29 | * `split` splits a string into an array based on a delimiter. If the delimiter is null, it returns null. If the delimiter is empty, it splits the string into individual characters.
30 | * `regexp_split_to_array` splits a string into an array by using a POSIX regular expression as the delimiter and returns the text from the end of the last match (or the beginning of the string) to the beginning of the match. When there are no more matches, it returns the text from the end of the last match to the end of the string.
31 |
32 | ### 0.0.23576 [October 16 2025]
33 | * The default_database_version is upgraded to version 2
34 | * This version better supports UPDATE and DELETE on extracts
35 | * All supported Tableau versions can read these files
36 | * Updated OpenSSL version from 3.4.1 to 3.4.3
37 |
38 | ### 0.0.23135 [August 28 2025]
39 | * This release adds three new regular expression functions:
40 | * `regexp_substr` to extract substrings
41 | * `regexp_count` to count matches
42 | * `regexp_instr` to find the position of a match
43 |
44 | ### 0.0.22502 [June 19 2025]
45 | * IANA released version 2025b of the Time Zone Database. Hyper’s time zone information is updated accordingly. Noteworthy changes:
46 | * New zone America/Coyhaique
47 | * Iran switched from +04 to +0330 on 1978-11-10 at 24:00, not at year end.
48 | * Support for the FILTER clause has been added to aggregation functions in Hyper SQL.
49 | * For example, you can now write queries such as `SELECT count(*), count(*) FILTER (WHERE color = 'blue') FROM phone_cases;`.
50 | * The FILTER clause is not supported for ordered-set aggregates. The FILTER clause is only supported for WINDOW functions, which are aggregates.
51 |
52 | ### 0.0.22106 [May 1 2025]
53 |
54 | * The following deprecated geospatial functions have been removed from Hyper SQL:
55 | * `geo_make_point` (superseded by `tableau.geo_make_point`)
56 | * `geo_make_line` (superseded by `tableau.geo_make_line`)
57 | * `geo_distance` (superseded by `tableau.geo_distance`)
58 | * `geo_buffer` (superseded by `tableau.geo_buffer`)
59 | * `geo_auto_vertex_order` (superseded by `tableau.geo_auto_vertex_order`)
60 | * `geo_invert_vertex_order` (superseded by `tableau.geo_invert_vertex_order`)
61 |
62 | ### 0.0.21408 [Feb 13 2025]
63 |
64 | * Hyper’s SQL for Hyper API is now documented as part of the [Salesforce Data Cloud SQL Reference](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/data-cloud-sql-context.html)
65 | * Please be aware that Data Cloud specific functions are not available in Hyper API. Those functions are marked accordingly in the “Applies To” headers of the individual documentation pages.
66 | * The `geography` type has been renamed to `tableau.tabgeography` and the geospatial functions have been moved to the `tableau` namespace.
67 | * Existing Hyper files will continue to work; however, SQL queries and HAPI programs will need to be adjusted.
68 | * For example, use `tableau.geo_make_point` in SQL queries instead of just `geo_make_point`.
69 | * Use `SqlType.tabgeography()` in Python and Java, and `SqlType::tabgeography()` in C++.
70 | * The plain `geography` type and all geospatial functions outside the `tableau` namespace are deprecated and will be removed in the near future.
71 | * IANA released version 2024a of the Time Zone Database. Hyper’s time zone information is updated accordingly. Noteworthy changes:
72 | * Paraguay adopts permanent -03 starting spring 2024.
73 | * Improve historical data for Mexico, Mongolia, Philippines, and Portugal.
74 | * Update syntax for [`ARRAY` literals](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/array.html) and fixed bugs with quoting and escaping of text arrays.
75 |
76 | ### 0.0.21200 [Jan 17 2025]
77 |
78 | * Support for Microsoft Azure Blob Storage using [`azure_location`](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/external-location.html#microsoft-azure-blob-storage) was added.
79 | * Documented `starts_with` and `ends_with`, as well as negative field positions for `split_part`. See [String Functions](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/string-func.html) for details
80 | * Fixed double free bug in Java Hyper API (reported in GitHub Issue [#133](https://github.com/tableau/hyper-db/issues/133)).
81 | * Improved performance of distinct aggregates (e.g., `SELECT COUNT(DISTINCT a) from t`).
82 | * Dropped Centos7/RHEL7 support (in line with Tableau Server 2025.1 dropping Centos7/RHEL7 support). Starting with v0.0.21200 Hyper API doesn't support Centos7/RHEL7 anymore.
83 |
84 | ### 0.0.20746 [Nov 7 2024]
85 |
86 | * Support for `array_contains`, `array_position` and `array_positions` was added
87 | * Support for the `unnest` set-returning function was added
88 | * Various performance and stability improvements
89 |
90 | ### 0.0.20027 [Aug 19 2024]
91 |
92 | * Introduced new [`array` SQL datatypes](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/array.html).
93 | * The options available for [EXPLAIN](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/explain.html) changed:
94 | * `EXPLAIN VERBOSE` was removed in favor of `EXPLAIN (FORMAT JSON)`
95 | * There are two new output formats `EXPLAIN (FORMAT TERSE_JSON)` and `EXPLAIN (FORMAT SCHEMA)`
96 | * Update Unicode support from Unicode 14.0 to 15.1
97 | * Update Hyper's collation tables from CLDR 71 to CLDR 74. Besides corrections this also adds new collations to Hyper.
98 |
99 | ### 0.0.19691 [July 4, 2024]
100 |
101 | * Hyper API is now available under the Apache 2.0 license.
102 |
103 | ### 0.0.19484 [June 6, 2024]
104 |
105 | * Introduced a new 32-bit floating point data type for `REAL`.
106 | * Previously, `REAL` was internally mapped to 64-bit `DOUBLE PRECISION`.
107 | * Introduced new [database file format version 4](hyper-api/hyper_process#version-4) to support reading and persisting the new 32-bit floats.
108 | * A `CAST(… AS double precision)` is needed to store such columns in older file formats.
109 | * Documented the new and improved [database file format version 3](hyper-api/hyper_process#version-3) that was introduced in version 0.0.16123. The new format supports 128-bit numerics. Refer to [Hyper Database Settings](/docs/hyper-api/hyper_process#default_database_version) for more information.
110 | * Documented the [regexp_replace](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/string-matching.html#regular-expression-functions) function which provides substitution of new text for substrings based on POSIX regular expressions.
111 | * Added native support for Apple Silicon processors (aarch64) for macOS 13.0 or newer
112 |
113 | :::warning
114 | Queries using `REAL`, `FLOAT4`, or `FLOAT(p)` with `p <= 24` are now treated as 32-bit floating points.
115 | This can lead to different results due to the reduced precision of 32-bit floating points.
116 | To preserve the old behavior, you need to use the types `DOUBLE PRECISION`, `FLOAT8`, or `FLOAT(p)` with `p >= 25`. These continue to be treated as 64-bit floating points.
117 | :::
118 |
119 |
120 |
121 | ### 0.0.18825 [March 6, 2024]
122 |
123 | * Updated OpenSSL version from 3.1.4 to 3.2.1
124 | * IANA released version 2024a of the Time Zone Database. Hyper’s time zone information is updated accordingly. Noteworthy changes:
125 | * Kazakhstan unifies on UTC+5 beginning 2024-03-01.
126 | * Palestine springs forward a week later after Ramadan.
127 |
128 |
129 | ### 0.0.18618 [February 7, 2024]
130 |
131 | * Overhauled the [SQL type propagation rules for the `NUMERIC` data type](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/numeric.html). This can lead to differences in the precision and number of decimal digits of `NUMERIC` calculations in existing queries and their results. The changes are:
132 | * Multiplication and division of `NUMERIC` with integer and numeric types now follows different rules to determine the result's precision and scale.
133 | * The `AVG` aggregate function now adds 6 instead of 4 decimal digits.
134 | * The statistical aggregate functions (like `STDDEV_SAMP`) now always return `NUMERIC(38,6)` for integer and numeric inputs. If a scale of 6 is too low for your purposes consider casting the input to `double precision`.
135 | * Integer literals are now treated as if they were of type numeric with the minimal required precision when in arithmetic operations with `NUMERIC` values.
136 | * IANA released version 2023d of the Time Zone Database. Hyper’s time zone information is updated accordingly. Noteworthy changes:
137 | * Ittoqqortoormiit, Greenland changes time zones on 2024-03-31.
138 | * Vostok, Antarctica changed time zones on 2023-12-18.
139 | * Casey, Antarctica changed time zones five times since 2020.
140 | * Code and data fixes for Palestine timestamps starting in 2072.
141 |
142 | ### 0.0.18441 [January 10, 2024]
143 |
144 | * Various performance and stability improvements
145 |
146 | ### 0.0.18369 [December 8, 2023]
147 |
148 | * Added support for `localized_week`
149 | * The functions `EXTRACT`, `date_part` and `date_trunc` support a new field `localized_week`.
150 | * Localized week options for the new field are added. See [Localized Week Options](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/datetime-func.html#localized-week-options).
151 |
152 | ### 0.0.18161 [November 8, 2023]
153 |
154 | * Reduced memory consumption for `WITH RECURSIVE`: Up to 20,000x less memory usage in microbenchmarks.
155 | * Improved performance for `WITH RECURSIVE`: Roughly 2x improvement in microbenchmarks.
156 | * Improved heuristic rewrites for joins:
157 | * Remove semi/anti-joins with a constant FALSE conditions.
158 | * Apply the exact same "constant FALSE condition" rewrites also in cases where the join has an empty input on one of both sides.
159 | * Updated OpenSSL version from 1.1.1u to 3.0.10.
160 |
161 | ### 0.0.17971 [October 9, 2023]
162 |
163 | * .Net Deprecation: As announced last release, we are deprecating the .NET version of Hyper API. We decided to [open-source its source code](https://github.com/tableau/hyper-api-dotnet), so whoever might be interested in maintaining it can pick up where we left.
164 | * Some of the [Fiscal Calendar Options](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/datetime-func.html#fiscal-calendar-options) are renamed:
165 | * `start_month` is renamed to `fiscal_year_start_month`.
166 | * `first_day_of_week` is renamed to `first_day_of_fiscal_week`.
167 | * The [EXTRACT](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/datetime-func.html#extract) function was accepting (and ignoring) named arguments that were not required. Now it only accepts [Fiscal Calendar Options](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/datetime-func.html#fiscal-calendar-options) when fiscal function fields are used. A named argument that is not required by the `EXTRACT` function will be rejected.
168 |
169 | ### 0.0.17782 [September 6, 2023]
170 |
171 | * Sharing a Hyper process between multiple programs is now supported. This allows for better resource management and performance if multiple programs that interact with Hyper run at the same time. See [HyperProcess: Performance Best Practices](/docs/hyper-api/hyper_process#performance).
172 | * The HyperAPI Python zip package was removed from our download page. The package is available on the Python Package Index (PyPI) and we recommend installation through `pip install tableauhyperapi` instead.
173 | * .Net Deprecation: The .NET version of Hyper API is deprecated. This release will be the last update for .NET. In the future, .NET will not receive any new features or updates. The old packages will stay available on NuGET indefinitely, so you can keep using older versions in .NET. The other languages (Python, Java, C++) are not impacted by this in any way. In case this is causing issues for you, please reach out via [Slack](https://join.slack.com/t/tableau-datadev/shared_invite/zt-1q4rrimsh-lHHKzrhid1MR4aMOkrnAFQ).
174 |
175 |
176 | ### 0.0.17537 [August 2, 2023]
177 |
178 | * Support for fiscal calendar was added
179 | * The functions `EXTRACT`, `date_part` and `date_trunc` have the following fiscal calendar fields: `fiscal_week`, `fiscal_month`, `fiscal_quarter`, and `fiscal_year`.
180 | * Fiscal calendar options for the newly-added fields were added. See [Fiscal Calendar Options](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/datetime-func.html#fiscal-calendar-options).
181 | * Updated OpenSSL version from 1.1.1t to 1.1.1u.
182 | * Support for reading and writing [Arrow](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/external-formats.html#apache-arrow-format) is now stable and ready for use in production
183 |
184 | ### 0.0.17360 [July 5, 2023]
185 |
186 | * Support for `AT TIME ZONE` was added. See [documentation of Date/Time Functions](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/datetime-func.html)
187 | * Experimental support for reading and writing [Arrow](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/external-formats.html#apache-arrow-format) files (`.arrow`) and streams (`.arrows`)
188 | * Support for the `COPY TO` statement was added. See [documentation of COPY TO](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/copy-to.html)
189 |
190 | ### 0.0.17231 [June 7, 2023]
191 |
192 | * Support for multiple concurrent connections to the same Hyper file was added
193 | * Support for `FETCH [...] WITH TIES` was added. See [documentation of FETCH](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/select-limit-offset.html#fetch-and-offset)
194 | * Improved query planning for external formats (e.g., Parquet, CSV, ...)
195 | * Samples are used for selectivity estimation on external formats
196 | * Distinct counts, statistics, and samples are no longer computed eagerly when issuing a `CREATE TEMP EXTERNAL TABLE`. Instead, the first query that uses the external table updates them.
197 |
198 | ### 0.0.17002 [May 3, 2023]
199 |
200 | * Improved [documentation](https://tableau.github.io/hyper-db/docs/)
201 | * IANA released version 2023c of the Time Zone Database. Hyper’s time zone information is updated accordingly. Noteworthy changes:
202 | * Egypt now uses DST again, from April through October.
203 | * This year Morocco springs forward April 23, not April 30.
204 | * Palestine delays the start of DST this year.
205 | * Much of Greenland still uses DST from 2024 on.
206 | * America/Yellowknife now links to America/Edmonton.
207 | * When observing Moscow time, Europe/Kirov and Europe/Volgograd now
208 | use the abbreviations MSK/MSD instead of numeric abbreviations,
209 | for consistency with other timezones observing Moscow time.
210 |
211 | ### 0.0.16868 [April 5, 2023]
212 |
213 | * Introduced `approx_count_distinct` aggregate
214 | * It can be used to compute an approximation to exact count distinct with configurable relative error.
215 | * E.g., the query `select approx_count_distinct(x) from generate_series(1,pow(10,6)) s(x)` returns `960712`.
216 | * A relative error argument is supported as well, e.g., `select approx_count_distinct(x, 0.002) from generate_series(1,pow(10,6)) s(x)` returns `998192`, a much better estimate with relative error under `0.2%` (the default value if omitted is `2.3%` relative error accuracy).
217 | * In general, `approx_count_distinct(c, e)` uses less memory than `count(distinct c)` and is faster. This makes it a good option when exact distinct count is not required.
218 |
219 | ### 0.0.16638 [March 1, 2023]
220 |
221 | * Updated OpenSSL version from 1.1.1q to 1.1.1t.
222 | * IANA released version 2022g of the Time Zone Database. Hyper’s time zone information is updated accordingly. Noteworthy changes:
223 | * Jordan and Syria switched from +02/+03 with DST to year-round +03
224 | * Mexico no longer observes DST except near the US border
225 | * Chihuahua moved to year-round -06 on 2022-10-30
226 | * Fiji no longer observes DST
227 | * Simplified four Ontario zones
228 | * The northern edge of Chihuahua changed to US timekeeping
229 | * Much of Greenland stops changing clocks after March 2023
230 | * Fixed some pre-1996 timestamps in northern Canada
231 |
232 | ### 0.0.16491 [February 8, 2023]
233 |
234 | * Added support for the [`GROUPING SETS` SQL feature](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/select-group-by.html), including `ROLLUP` and `CUBE`.
235 |
236 |
237 | ### 0.0.16377 [January 18, 2023]
238 |
239 | * Minor improvements and bug fixes.
240 |
241 | ### 0.0.16123 [December 7, 2022]
242 |
243 | * Added support for 128-bit numerics. This allows a precision of up to 38 for the `NUMERIC` SQL type.
244 | * Added support to read 128-bit `DECIMAL` values from parquet files.
245 | * Overhauled the [SQL type propagation rules for the `NUMERIC` data type](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/numeric.html).
246 | * Improved partition pruning support when querying Apache Iceberg. This should speed up queries with
247 | equality predicates on Iceberg columns partitioned with bucket partitioning.
248 | * New `ANY_VALUE` aggregate function: The `ANY_VALUE` aggregate function returns an arbitrary, implementation-defined value from the set of input values within a group.
249 |
250 | ### 0.0.15888 [November 9, 2022]
251 | * IANA released version `2022d` of the Time Zone Database. Hyper's time zone information is updated accordingly. Noteworthy changes:
252 | * Palestine daylight savings time (DST) transitions are now Saturdays at 02:00 (24-hour clock).
253 | * Simplified three Ukrainian zones into one.
254 |
255 | ### 0.0.15735 [October 5, 2022]
256 |
257 | * New support for Apache Iceberg as an [external format](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/external-files.html).
258 | * Support for reading external files from S3 is now enabled by default. (The experimental_external_s3 setting has been removed. Specifying it now causes an unknown setting error.)
259 | * "New convenience functions to extract date and time units:
260 | * New [YEAR](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/datetime-func.html#functions) function: extracts the year of a timestamp or interval.
261 | * New [QUARTER](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/datetime-func.html#functions) function: extracts the quarter of a timestamp.
262 | * New [MONTH](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/datetime-func.html#functions) function: extracts the month of a timestamp or interval.
263 | * New [WEEK](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/datetime-func.html#functions) function: extracts the week of a timestamp.
264 | * New [DAY](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/datetime-func.html#functions) function: extracts the day of a timestamp or interval.
265 | * New [HOUR](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/datetime-func.html#functions) function: extracts the hour of a timestamp or interval.
266 | * New [MINUTE](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/datetime-func.html#functions) function: extracts the minute of a timestamp or interval.
267 | * New [SECOND](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/datetime-func.html#functions) function: extracts the second of a timestamp or interval.
268 | * IANA released version `2022c` of the Time Zone Database. Hyper's time zone information is updated accordingly. Noteworthy changes:
269 | * Chile's DST is delayed by a week in September 2022.
270 | * Iran no longer observes DST after 2022.
271 | * Renamed Europe/Kiev to Europe/Kyiv.
272 | * Fixes to support timestamps prior to 1970.
273 |
274 | ### 0.0.15530 [September 7, 2022]
275 |
276 | * To read external data from Amazon S3, you must now provide credentials when using the extended syntax `s3_location(...)`. Omitting credentials now causes an error. For anonymous access to S3 provide empty credentials (`""`) instead.
277 |
278 | ### 0.0.15305 [August 3, 2022]
279 |
280 | * Minor improvements and bug fixes.
281 |
282 | ### 0.0.15145 [July 13, 2022]
283 |
284 | * Added ZSTD and LZ4_RAW compression support for Parquet files.
285 | * Updated OpenSSL version from 1.1.1n to 1.1.1q.
286 | * IANA released version `2022a` of the Time Zone Database. Hyper's time zone information is updated accordingly. Noteworthy changes:
287 | * Palestine will spring forward on `2022-03-27`, not `2022-03-26`.
288 | * From 1992 through spring 1996, Ukraine's DST transitions were at `02:00 standard time`, not at `01:00 UTC`.
289 | * Chile's Santiago Mean Time and its LMT precursor have been adjusted eastward by 1 second to align with past and present law.
290 | * Updated Hyper's collation tables from CLDR 38.1 to CLDR 41. Besides corrections this also adds new collations to Hyper.
291 | * Updated Unicode support from Unicode 13.0.0 to 14.0.0.
292 |
293 | ### 0.0.14946 [June 1, 2022]
294 |
295 | * Updated OpenSSL version from 1.1.1l to 1.1.1n.
296 | * New [TRY_CAST](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/type-conversion.html) function: converts a value to a target type, returns NULL on failure.
297 |
298 | ### 0.0.14751 [May 4, 2022]
299 |
300 | * Restriction pushdown for Parquet files: Hyper now exploits min/max values in Parquet RowGroups to skip groups based on the predicates present in SQL queries.
301 | * Besides many corrections, this update also adds a significant number of new collations to Hyper. Previously, the collations Hyper used were based on CLDR 1.8 from March 2010.
302 | * C++: Fixed inserting and querying columns of type CHAR(1).
303 | * Fixed empty strings of type CHAR(1) being returned as a space instead of '\0'.
304 | * Fixed a defect which could lead to Hyper crashing when using outer joins with Parquet files.
305 | * Fixed a defect which prevented Hyper from opening external files from Amazon S3 if the S3 URL contained a whitespace character, e.g. "s3://bucket/filename with whitespace.csv"
306 |
307 | ### 0.0.14567 [March 23, 2022]
308 |
309 | * Result fetching of large results is up to 5x faster.
310 | * Fix a potential crash when reading multiple Parquet files with string columns.
311 |
312 | ### 0.0.14401 [March 2, 2022]
313 |
314 | * Introduced the new and improved database file format version 2 that can be used via [Hyper Process Settings](/docs/hyper-api/hyper_process). The new format stores data independent of collation versions. File format 1 is deprecated in favor of the new file format 2. Refer to [Hyper Database Settings](/docs/hyper-api/hyper_process#default_database_version) for more information.
315 | * Added support for S3 keys containing special characters (such as "=")
316 | * Implemented support for [external(source_location(...))](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/setreturning.html#external) syntax.
317 |
318 | ### 0.0.14265 [February 2, 2022]
319 |
320 | Improved external file format support (CSV & Apache Parquet): Now you can use Hyper as a SQL
321 | query engine directly on top of open formats and data lakes.
322 | * Hyper now has experimental support for reading external data directly from Amazon S3. ~~You need to enable the experimental_external_s3
323 | setting to use this feature and be aware that it can **change or be removed at any time without prior notice**.~~ The feature is considered stable as of 0.0.15735. The experimental flag is not necessary anymore.
324 |
325 | Hyper's S3 capabilities are highly optimized
326 | (using techniques such as concurrent requests, request hedging and prefetching). For maximum performance,
327 | ensure a high network bandwidth to Amazon S3, e.g., by running HyperAPI directly on an AWS EC2 instance.
328 | * Temporary external tables: The new
329 | [CREATE TEMPORARY EXTERNAL TABLE](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/create-external-table.html)
330 | command exposes external data to SQL as if it was a Hyper table, but the data is read directly
331 | from the external file whenever the external table is referenced in a query.
332 | * The new function [external](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/setreturning.html#external),
333 | enables reading external data directly in a SQL query without creating an external table.
334 | * Aligned the syntax of the [COPY](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/copy-from.html)
335 | statement with the syntax for external tables and the `external` function.
336 | The old syntax is still supported for PostgreSQL compatibility but its use is discouraged.
337 | * The new `ARRAY[...]` syntax enables reading from multiple files when using the `external` function, external tables,
338 | or the `COPY` command.
339 | * Graceful handling of invalid UTF-8 sequences:
340 | The new [SANITIZE](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/external-formats.html#format-options)
341 | option instructs Hyper to replace invalid UTF-8 sequence with the replacement character (�) instead of failing the query with an error.
342 | * Improved support for reading CSV files:
343 | * GZip-compressed CSV files: CSV files ending in `.gz` will automatically be assumed to be GZip-compressed.
344 | * UTF-16 encoded CSV files: UTF-16 reading can be enabled using the new
345 | [ENCODING](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/external-formats.html#format-options)
346 | option.
347 | * Graceful cast failure handling: When a value in the file cannot be cast
348 | to the target type, the new
349 | [ON_CAST_FAILURE](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/external-formats.html#format-options)
350 | option instructs Hyper to read the value as NULL instead of raising an error.
351 |
352 | ### 0.0.14109 [January 5, 2022]
353 |
354 | * Minor improvements and bug fixes.
355 |
356 | ### 0.0.13980 [December 8, 2021]
357 | * Smaller packages: Thanks to the removal of unused collation data from the Hyper binary, the package size was reduced. For example, the size of an unpacked Windows Python installation went from 157 MB to 145 MB. The download size of a packed Windows Python package was reduced from 47 MB to 42 MB.
358 | * Java: Improved the read performance of text and geography columns.
359 | * Fixed a defect that could lead to crashes when reading Parquet files with text columns that contain null values.
360 | * Fixed a defect that could lead to Hyper sorting and comparing text with the "ro" locale incorrectly.
361 | * IANA released new versions of the Time Zone Database. This commit updates Hyper's Time Zone Database to release 2021e.
362 |
363 | Noteworthy changes in the Time Zone Database:
364 |
365 | * Palestine will fall back 10-29 (not 10-30) at 01:00.
366 | * Fiji suspends DST for the 2021/2022 season.
367 | * Jordan now starts DST on February's last Thursday.
368 | * Samoa no longer observes DST.
369 | * Merge more location-based Zones whose timestamps agree since 1970.
370 | * Rename Pacific/Enderbury to Pacific/Kanton.
371 |
372 | ### 0.0.13821 [November 3, 2021]
373 | * Reading Apache Parquet files is now officially supported and no longer has to be enabled through the use of the process setting ‘experimental_external_format_parquet’.
374 | * Improved performance for window functions for large data sets on multi-core machines:
375 | * calls without `PARTITION BY` clause improved by 5% - 20%
376 | * calls without `PARTITION BY` and `ORDER BY` clauses, e.g. `ROW_NUMBER() OVER()`, by 10% - 25%
377 | * Fixed a defect that could cause crashes when you deleted a tuple multiple times, or could cause wrong query results after single deletion.
378 | * Updated OpenSSL version from 1.1.1k to 1.1.1l
379 |
380 | ### 0.0.13617 [October 6, 2021]
381 |
382 | * Fix a query compilation defect that led to reproducible crashes for a very small number of queries.
383 | * Upgraded Unicode support from Unicode 9.0.0 to 13.0.0
384 |
385 | ### 0.0.13394 [September 1, 2021]
386 |
387 | * Hyper API now runs on AWS lambda.
388 | * Parquet files with dots in their column names can now be read.
389 | * Column references can now be qualified with database alias (e.g., `SELECT db.schema.table.column ...`)
390 | * More actionable error messages for a wide range of invalid SQL queries.
391 | * Going forward, the Hyper API will only support the three most recent versions of Python. Currently, those versions are 3.7, 3.8, and 3.9. However, the Hyper API will continue to support Python 3.6 for a transition period of three months.
392 |
393 | ### 0.0.13287 [August 4, 2021]
394 |
395 | * Java: Dependencies are updated to newer versions. In particular, JNA was updated to 5.6.0.
396 |
397 | ### 0.0.13129 [July 7, 2021]
398 |
399 | * Minor improvements and bug fixes.
400 |
401 | ### 0.0.12982 [June 9, 2021]
402 |
403 | * Fixed a problem that could corrupt databases in rare cases when the [new file format](/docs/hyper-api/hyper_process#default_database_version) has explicitly been enabled by the user. This problem did not affect the default file format.
404 | * Updated OpenSSL dependency from 1.1.1g to 1.1.1k.
405 |
406 | ### 0.0.12805 [May 19, 2021]
407 |
408 | * Hyper now has experimental support for reading Apache Parquet files. See [Hyper API SQL documentation](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/copy-from.html#sql-copy-examples) for details.
409 | * Hyper now adjusts the resulting interval from a timestamp subtraction so that 24-hour time periods are represented as days.
410 | * Hyper now supports +/-13 and +/-14 as timezone offsets.
411 | * Python: The most commonly used Hyper API types now have `__repr__()` methods and will return a string representation of the object when printed, making interactive exploring of the Hyper API more fun.
412 | * Improved handling of geospatial types:
413 | * Parsing GEOGRAPHY values from Well-known text (WKT) format automatically adjusts the order of vertices in polygons.
414 | * During WKT parsing, additional vertices may be added to more closely resemble the original shape specified in the WKT.
415 |
416 | ### 0.0.12514 [April 7, 2021]
417 |
418 | * Fixed a rare defect where queries could return incorrect results after tuples at the end of a table were deleted.
419 |
420 | ### 0.0.12366 [March 10, 2021]
421 |
422 | * Improved performance for complex queries thanks to improved join ordering.
423 | * Fixed a defect where Hyper would use too much memory when executing string expressions in certain contexts.
424 |
425 | ### 0.0.12249 [February 17, 2021]
426 |
427 | * IANA released version `2021a` of the Time Zone Database. Hyper's time zone information is updated accordingly. Noteworthy changes:
428 | * Revised predictions for Morocco's changes starting in 2023.
429 | * Canada's Yukon changes to `-07` on `2020-11-01`, not `2020-03-08`.
430 | * Macquarie Island has stayed in sync with Tasmania since 2011.
431 | * Casey, Antarctica is at `+08` in winter and `+11` in summer.
432 | * Fiji starts DST later than usual, on `2020-12-20`.
433 | * Palestine ends DST earlier than predicted, on `2020-10-24`.
434 | * Volgograd switches to Moscow time on `2020-12-27` at `02:00`.
435 | * South Sudan changes from `+03` to `+02` on `2021-02-01` at `00:00`.
436 | * Added additional information to certain Hyper API exceptions that previously contained only their context id.
437 |
438 | ### 0.0.12005 [January 20, 2021]
439 |
440 | * Introduced a new and improved database file format that can be used via [Hyper Process Settings](/docs/hyper-api/hyper_process). Refer to [Hyper Database Settings](/docs/hyper-api/hyper_process#default_database_version) for more information.
441 | * Clarified the `Create hyper file from csv` example: We highlight the usage of the `HEADER` COPY option which ignores the first line in a csv file.
442 | * Java: Fixed the `getShort()` method to return a `short` instead of an `int`.
443 |
444 | ### 0.0.11952 [December 16, 2020]
445 |
446 | * When Hyper is running inside a container, such as Docker, Hyper now respects the memory limits that are set for the container.
447 |
448 | ### 0.0.11889 [December 2, 2020]
449 |
450 | * Fixed a parsing error that could lead to a failure to connect to a Hyper database. This error could occur with certain operating system configurations if you were using special UTF-8 characters as the database name.
451 |
452 | ### 0.0.11691 [November 9, 2020]
453 |
454 | * Faster initialization of `HyperProcess`: Starting Hyper is now 4x faster. For example, on our internal Linux computers, we measured 11 milliseconds startup time instead of previously 44 milliseconds.
455 | * Python: `TableDefinition.Column.collation` represents the default collation with `None` now. Previously, the results of `catalog.get_table_definition` used `''` for the default collation. This is a breaking change.
456 |
457 | ### 0.0.11556 [September 30, 2020]
458 |
459 | * C++: Fixed a bug that could have lead to wrong or missing results when multiple `ResultIterator` or `ChunkIterator` iterators are constructed over the same `hyperapi::Result` object.
460 | * C++: Interface fix: Removed an incorrect `noexcept` specification from the `ResultIterator()` and `ChunkedIterator()` constructors for begin iterators. These functions may fail by throwing `std::bad_alloc` or `hyperapi::HyperException`. Those were previously flagged as `noexcept` even though they could have thrown.
461 | * Removed support for the PostgreSQL legacy end-of-data marker `\.`. The marker could be used to mark the end of CSV and TEXT input. Hyper now solely relies on the end-of-file condition to determine the end.
462 |
463 | ### 0.0.11355 [August 26, 2020]
464 |
465 | * Removed the following settings for the `HyperProcess` class that were deprecated since version 0.0.10309:
466 | * `log-dir`: Use `log_dir` instead.
467 | * `:restrict_database_directory`: Not required since Hyper no longer creates database files in the working directory.
468 | * `:database_directory`: Not required since Hyper no longer creates database files in the working directory.
469 | * `:log_file_size_limit`: Use `log_file_size_limit` instead.
470 | * `:log_file_max_count`: Use `log_file_max_count` instead.
471 |
472 | ### 0.0.11249 [July 30, 2020]
473 |
474 | * Hyper now correctly checks for NOT NULL constraints when creating a table from a CSV file with the COPY statement.
475 |
476 | ### 0.0.11074 [June 24, 2020]
477 |
478 | * Adds several SQL functions for managing geospatial data:
479 | * For creating geography objects (`geo_make_point` and `geo_make_line`).
480 | * For performing calculations on geography objects (`geo_distance` and `geo_buffer`).
481 | * For manipulating the vertex order of polygons in geography objects (`geo_auto_vertex_order` and `geo_invert_vertex_order`). These functions can be used to address problems (for example, with geospatial joins or to automatically zoom) where data comes from a source that uses a different winding order for polygons than the one used by Tableau. In Tableau, the interior of the polygon is considered to be on the left of the path drawn by points of the polygon ring.
482 | * Prepared queries gained support for parallelized execution. See [PREPARE](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/prepare.html) and [EXECUTE](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/execute.html) for more information on prepared queries in Hyper.
483 | * Java: Fixed crashes that could occur when inserting more than 16 MB of data into a table.
484 | * Python: Fixed crashes of Python interpreter on shutdown by fixing reference counting.
485 | * .NET: Fixed broken Nuget packages.
486 | * Fixed a hanging query result fetch operation in the Hyper API when rows are consistently larger than 1 MB.
487 | * New Python sample file that shows how you can use the Hyper API to reduce the fragmentation of `.hyper` files. See [Optimize Hyper File Storage](/docs/guides/hyper_file/optimize) and the [defragment-data-of-existing-hyper-file](https://github.com/tableau/hyper-api-samples/tree/main/Community-Supported/defragment-hyper-file) sample on GitHub.
488 |
489 | ### 0.0.10899 [May 27, 2020]
490 |
491 | * Hyper now fully supports the options `FORCE_NULL` and `FORCE_NOT_NULL` for CSV parsing. By default, only unquoted values are compared to the null string to determine whether they represent a `NULL` value. `FORCE_NULL` toggles the same for quoted values. `FORCE_NOT_NULL` disables comparison of non-quoted values with the null string. See [COPY command](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/copy-from.html).
492 |
493 | * Updated the target framework of the Hyper API for .NET example from .NET Core 2.2 to .NET Core 3.1. .NET Core 2.2 has already reached its end of life at 2019-12-23 and increasingly surfaced stability problems. We continue to target the .NET Standard 2.0 in the Hyper API for .NET.
494 |
495 | * IANA released version `2020a` of the Time Zone Database. Hyper's time zone information is updated accordingly. Noteworthy changes:
496 | * Morocco springs forward on `2020-05-31`, not `2020-05-24`.
497 | * Canada's Yukon advanced to `-07` year-round on `2020-03-08`.
498 | * `America/Nuuk` was renamed from `America/Godthab`.
499 |
500 | ### 0.0.10622 [April 22, 2020]
501 |
502 | * If you use the Hyper API and accidentally open a file that is not a Hyper file, you now see a more informative error message.
503 |
504 | * C++: Fixed a memory leak in the constructor of `hyperapi::HyperProcess` when an invalid parameter was supplied.
505 |
506 | * The Python Hyper API now exposes a `__version__` attribute and thus supports PEP 396.
507 |
508 | ### 0.0.10309 [March 25, 2020]
509 |
510 | * The Hyper API `Inserter` class now allows SQL expressions to compute or transform data on the fly during insertion.
511 |
512 | * The Hyper API `Inserter` class now allows inserting Well-known text (WKT) into `Geography` columns. You can use the `CAST` expression to transform WKT data to the `Geography` type and provide WKT data as a string to the `Inserter` class. For more information, see [Add Geospatial Data to a Hyper File](/docs/guides/hyper_file/geodata).
513 |
514 | * Documented the available settings that can be passed to the `HyperProcess` and `Connection` constructors. See [Settings](/docs/hyper-api/hyper_process#passingprocesssettings).
515 |
516 | * Exposed settings for the `HyperProcess` class that give control over the way Hyper communicates with its clients. See [Connectivity Settings](/docs/hyper-api/hyper_process#connectivitysettings).
517 |
518 | * Exposed settings for the `HyperProcess` class that give control over its logging behavior. See [Logging Settings](/docs/hyper-api/hyper_process#loggingsettings).
519 |
520 | * Exposed settings for the `Connection` class that give control over date and time parsing. See [Date and Time Settings](/docs/hyper-api/connection#datetimesettings).
521 |
522 | * The Hyper API no longer creates database files in the working directory. Instead, they are placed in a temporary directory. This makes it easier to use the Hyper API in write-protected working directories.
523 |
524 | * Deprecated the following settings for the `HyperProcess` class:
525 | * `log-dir`: Now called `log_dir`.
526 | * `:restrict_database_directory`: Not required since Hyper no longer creates database files in the working directory.
527 | * `:database_directory`: Not required since Hyper no longer creates database files in the working directory.
528 | * `:log_file_size_limit`: Now called `log_file_size_limit`.
529 | * `:log_file_max_count`: Now called `log_file_max_count`.
530 |
531 | The deprecated settings will continue to work for at least three releases. Afterwards, the deprecated settings will be removed.
532 |
533 | * The C++ HAPI now expects all settings (i.e., the keys and values of the `parameters` map passed to the constructor of `HyperProcess` and `Connection`) to be passed in UTF-8 encoding.
534 |
535 | * Improved loading time for Python: `import tableauhyperapi` now takes 100 milliseconds instead of 250 milliseconds.
536 |
537 | * Added the `to_date` function. See [Data Type Formatting Functions](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/formatting.html).
538 |
539 | ---
540 |
541 | ### 0.0.10002 [February 26, 2020]
542 |
543 | * Reduced memory consumption for `INSERT`: When inserting a large number of tuples using INSERT, Hyper API now uses less RAM. This is particularly important when copying large tables using `INSERT INTO newtable SELECT * FROM oldtable`.
544 |
545 | * Simplified installation requirements on Windows: The Hyper API no longer requires that you install the Microsoft Visual C++ Runtime Library separately.
546 |
547 | * Smaller packages: Thanks to improvements to our build processes and packaging, the package size was reduced. For example, the size of an unpacked Python installation went from 186 MB to 174 MB. The download size of a packed Python package was reduced from 49 MB to 46 MB.
548 |
549 | * Bug fix for `VALUES` clauses: In rare cases, Hyper evaluated a join against a `LATERAL VALUES` clause incorrectly, leading to crashes or incorrect results. With this release, Hyper now evaluates such `VALUES` clauses correctly.
550 |
551 | * Deprecations around the `HyperExpection` class: The following changes were done to simplify the interface of the `HyperException` class across languages. All of the deprecated functions can be replaced by their newly introduced alternatives. In general, these changes should only impact power users. For most use cases, we recommend using `str()` (Python), `getMessage()` (Java), `ToString()` (C#) or `what()` (C++).
552 | * Python: `message` was deprecated in favor of `main_message` and `hint_message` was deprecated in favor of `hint`. Furthermore, `context_id` is now an instance of the `ContextId` class and no longer a plain integer.
553 | * Java: `getErrorMessage` was deprecated in favor of `getMainMessage`.
554 | * C#/.Net: The `PrimaryMessage` property was deprecated in favor of `MainMessage`.
555 | * C++: `getHintMessage` was deprecated in favor of `getHint`. `getMessage` was deprecated in favor of `getMainMessage`. Furthermore, `HyperException::getCause` now returns a `optional` instead of a `HyperException`. The method `hasCause` was deprecated.
556 |
557 | The old method names will stay unchanged and continue working for at least the next three releases of Hyper API. They will be removed at some point in future after that.
558 |
559 | ---
560 |
561 | ### 0.0.9746 [January 29, 2020]
562 |
563 | * Improved time zone support. In particular, the `TIMESTAMP WITH TIME ZONE` (or `TIMESTAMPTZ`) type is now properly supported.
564 |
565 | * This release includes documentation for several SQL features, including:
566 | * Manipulation and formatting of date/time values and intervals, also with full time zone support. See [Data Type Formatting Functions](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/formatting.html) and [Date/Time Functions and Operators](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/datetime-func.html).
567 | * Sub-query expressions (for example, `EXISTS`, `IN`, `ALL`). See [Subquery Expressions](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/subquery-comparison.html).
568 | * Window aggregate functions (for example, `RANK()`). See [Window Functions and Queries](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/window.html).
569 | * `generate_series` - See [Set Returning Functions](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/setreturning.html).
570 | * Data Types: boolean, binary, numeric types, character, date/time. See [Data Types](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/datatypes.html).
571 |
572 | * The Tableau Hyper API no longer requires write access in the working directory.
573 |
574 | * Improved error handling and messages.
575 |
576 | * The Tableau Hyper API is available on the Python Package Index (PyPI). You can now install the Tableau Hyper API using the package installer, `pip`.
577 |
578 | ```
579 | pip install tableauhyperapi
580 | ```
581 |
582 | Or, if you previously installed the package.
583 |
584 | ```
585 | pip install --upgrade tableauhyperapi
586 | ```
587 |
588 | Linux installations require `pip` version 19.3 or newer. Note that `pip` versions 20.0 and 20.1 are not working because of issues with `pip` and not the Tableau Hyper API package.
589 |
590 | * Support for macOS 10.15 (Catalina). You can now install the Hyper API on computers running macOS 10.13 and later.
591 |
592 | * The `HyperProcess` (hyperd.exe) on Windows no longer opens a terminal window (Issue 1039998).
593 |
594 | * Hyper is now reusing space freed by DELETE (Issue 1056751). In a rolling-window scenario (where old data is deleted in bulk before appending new data), previous versions of the Tableau Hyper API would not re-use the deleted space, causing the `.hyper` file to grow. This problem is fixed with this release. In addition to the simple rolling window scenario, the fix also applies to other bulk deletion patterns.
595 |
596 | * UPDATE now supports multi-column subqueries in SET clauses. See [UPDATE](https://developer.salesforce.com/docs/data/data-cloud-query-guide/references/dc-sql-reference/update.html).
597 |
598 | * Standard-compliant natural join.
599 |
600 | ---
601 |
602 | ### 0.0.9273 [December 4, 2019]
603 |
604 | * NuGet package for the Tableau Hyper API for .NET. You can now reference the Tableau Hyper API library from your project file as you would for other NuGet packages. See [Install the Hyper API for .NET](http://localhost:3000/docs/installation?client-language=dotnet#instructions).
605 |
606 | * The Hyper API for Python now allows you to use `pathlib.Path` to specify the `hyper_path` when you start the HyperProcess. This is the path to the directory that contains the `hyperd` executable file.
607 |
608 | * Support added for the asterisk (`*`) in namespace-qualified column references. For example, you can select the columns from a table in a specified namespace using three-part names (`schema_name.table_name.*`).
609 |
610 | ```sql
611 | SELECT schema_name.table_name.*, schema_name2.table_name.* FROM schema_name.table_name, schema_name2.table_name ...
612 | ```
613 |
614 | * Support for quoted strings in CSV headers.
615 |
616 | * When Hyper is launched inside a container (for example, Docker), Hyper now respects the memory limits that are set for the container. Previously, Hyper would assume that full system memory was available.
617 |
618 | * Updated requirements. The Hyper API requires Microsoft Visual C++ Runtime Library version 19.15.26726 or later. You can download the library from Microsoft: [Microsoft Visual C++ Redistributable for Visual Studio 2015, 2017 and 2019](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads)
619 |
620 |
621 |
622 | ---
623 |
624 | ### 0.0.8953 [October 30, 2019]
625 |
626 | * Various bug fixes. See the **Resolved Issues** on the [Hyper API Product Release and Download](https://tableau.com/support/releases/hyper-api/latest) page.
627 |
628 | * Documentation updates to correct C++ installation instructions, platform support (macOS 10.15 not yet supported).
629 |
630 | **Changed in this release**
631 |
632 | * In the Hyper API (Python), the `name` parameter in the `TableDefinition` method changed to `table_name`.
633 | If you use keyword arguments to define tables in the previous release of the Hyper API, you need to modify your code.
634 |
635 | For example, if you were creating a table called `airports` in the `public` namespace (schema), you would need to make the following change.
636 |
637 | Change:
638 |
639 | ```python
640 | airports_table = TableDefinition(name=TableName( "public", "airports"), ...)
641 | ```
642 |
643 | To the following:
644 |
645 | ```python
646 | airports_table = TableDefinition(table_name=TableName("public", "airports"), ... )
647 | ```
648 |
649 | Note, if you are using positional arguments, you can avoid this issue.
650 |
651 | ```python
652 | airports_table = TableDefinition(TableName("public", "airports"), ...)
653 | ```
654 |
655 | ---
656 |
657 | ### 0.0.8707 [October 2019]
658 |
659 | The Hyper API replaces the Extract API 2.0 for building applications that create and update Tableau extract files (`.hyper`) for Tableau 10.5 and later. The Hyper API provides more capabilities and improved performance when compared to the previous API.
660 |
661 | * Use SQL statements to insert, read, update, and delete data in extract files
662 |
663 | * Copy data directly from CSV files
664 |
665 | * Create applications in Python, Java, C++, or .NET (C#)
666 |
667 | * Read data from `.hyper` files
668 |
669 | * Update data in existing `.hyper` files
670 |
671 | * Delete data from existing `.hyper` files
672 |
673 | * Drastic performance improvements for extract creation
674 |
675 | ---
676 |
--------------------------------------------------------------------------------