Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hyper API January 2025 Release #141

Merged
merged 11 commits into from
Jan 17, 2025
7 changes: 7 additions & 0 deletions website/docs/releases.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,13 @@ In case you are wondering why all our releases start with `0.0`, read [this FAQ

:::

### 0.0.21200 [Jan 17 2025]

* Support for Microsoft Azure Blob Storage using [`azure_location`](./sql/external/location.md#microsoft-azure-blob-storage) was added.
* Documented [`starts_with`](./sql/scalar_func/string.md) and [`ends_with`](./sql/scalar_func/string.md), as well as negative field positions for [`split_part`](./sql/scalar_func/string.md).
* Fixed double free bug in Java Hyper API (reported in GitHub Issue [#133](https://github.com/tableau/hyper-db/issues/133)).
* Improved performance of distinct aggregates (e.g., `SELECT COUNT(DISTINCT a) from t`).

### 0.0.20746 [Nov 7 2024]

* Support for `array_contains`, `array_position` and `array_positions` was added
Expand Down
28 changes: 28 additions & 0 deletions website/docs/sql/external/location.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ s3_location('amazon_s3_uri'
[, access_key_id => 'text', secret_access_key => 'text' [, session_token => 'text'] ]
[, region => 'text']
)
azure_location('azure_blob_storage_uri'
[, sas_token => 'sas_token']
)
ARRAY[ <source_location> [, ...] ]
```

Expand Down Expand Up @@ -54,6 +57,31 @@ techniques such as concurrent requests, request hedging and
prefetching). For maximum performance, ensure a high network bandwidth
to Amazon S3, e.g., by running HyperAPI directly on an AWS EC2 instance.

## Microsoft Azure Blob Storage

```
SELECT * FROM external(
azure_location(
'abfss://container@account.dfs.core.windows.net/products.parquet', sas_token => 'secret-sas-token'
)
)
```

To access data stored on Microsoft Azure Blob Storage, you can use the
`azure_location` syntax. Hyper supports the `DFS` and `BLOB` endpoints and
recognizes all of the following Azure URL formats:
* `abfss://container@account.dfs.core.windows.net/...`
* `https://account.dfs.core.windows.net/container/...`
* `https://account.blob.core.windows.net/container/...`

Hyper also allows you to enter the non-SSL version of the URLs (`http://` and `abfs://`),
however it will always establish SSL encrypted connections.

Hyper's Azure support is highly optimized by using techniques such as concurrent
requests, request hedging and prefetching. For maximum performance, ensure that you
have a high network bandwidth to Azure Blob Storage, e.g. by running HyperAPI directly
on Microsoft Azure compute.

## Multiple files

```
Expand Down
4 changes: 3 additions & 1 deletion website/docs/sql/scalar_func/string.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ Function|Return Type|Description|Example
`concat(str "any" [, str "any" [, ...] ])`|`text`|Concatenate the text representations of all the arguments. NULL arguments are ignored, in contrast to <code>&#124;&#124;</code>.|`concat('abcde', 2, NULL, 22)` → `abcde222`
`decode(string text, format text)`|`bytea`|Decode binary data from textual representation in `string`. Options for `format` are same as in `encode`.|`decode('MTIzAAE=', 'base64')` → `\x3132330001`
`encode(data bytea, format text)`|`text`|Encode binary data into a textual representation. Supported formats are: `base64`, `hex`, `escape`. `escape` converts zero bytes and high-bit-set bytes to octal sequences (`\``<nnn>`) and doubles backslashes.|`encode('123\000\001', 'base64')` → `MTIzAAE=`
`ends_with(string text, suffix text)`|`boolean`|Return true if `string` ends with `suffix`.|`ends_with('alphabet', 'bet')` → `t`
`initcap(string)`|`text`|Convert the first letter of each word to upper case and the rest to lower case. Words are sequences of alphanumeric characters separated by non-alphanumeric characters.|`initcap('hi THOMAS')` → `'Hi Thomas'`
`left(str text, n int)`|`text`|Return first `<n>` characters in the string. When `<n>` is negative, return all but last <code>&#124;&#60;n&#62;&#124;</code> characters.|`left('abcde', 2)` → `'ab'`
`length(string)`|`int`|Number of characters in `string`|`length('jose')` → `4`
Expand All @@ -49,7 +50,8 @@ Function|Return Type|Description|Example
`right(str text, n int)`|`text`|Return last `<n>` characters in the string. When `<n>` is negative, return all but first <code>&#124;&#60;n&#62;&#124;</code> characters.|`right('abcde', 2)` → `'de'`
`rpad(string text, length int , fill text)`|`text`|Fill up the `string` to length `length` by appending the characters `fill` (a space by default). If the `string` is already longer than `length` then it is truncated.|`rpad('hi', 5, 'xy')` → `'hixyx'`
`rtrim(string text , characters text)`|`text`|Remove the longest string containing only characters from `characters` (a space by default) from the end of `string`.|`rtrim('testxxzx', 'xyz')` → `'test'`
`split_part(string text, delimiter text, field int)`|`text`|Split `string` on `delimiter` and return the given field (counting from one).|`split_part('abc~@~def~@~ghi', '~@~', 2)` → `'def'`
`split_part(string text, delimiter text, field int)`|`text`|Split `string` on `delimiter` and return the given field (counting from one). When `n` is negative, returns the `|n|`-th-from-last field. |`split_part('abc~@~def~@~ghi', '~@~', 2)` → `'def'`
`starts_with(string text, prefix text)`|`boolean`|Return true if `string` starts with `prefix`.|`starts_with('alphabet', 'alph')` → `t`
`strpos(string, substring)`|`int`|Location of specified substring (same as `position(substring in string)`, but note the reversed argument order).|`strpos('high', 'ig')` → `2`
`substr(string, from , count)`|`text`|Extract substring (same as `substring(string from from for count)`).|`substr('alphabet', 3, 2)` → `'ph'`
`to_hex(number int or bigint)`|`text`|Convert `number` to its equivalent hexadecimal representation.|`to_hex(2147483647)` → `'7fffffff'`
4 changes: 2 additions & 2 deletions website/src/config.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const version_long = '0.0.20746.reac9bd2d';
const version_long = '0.0.21200.re11c8cb9';
const version_short = version_long.substr(0, version_long.lastIndexOf('.'));

const downloadBaseUrl = 'https://downloads.tableau.com/tssoftware/';
Expand All @@ -17,7 +17,7 @@ export const config = {
macos_arm_cxx: `${downloadBaseUrl}/tableauhyperapi-cxx-macos-arm64-release-main.${version_long}.zip`,
macos_arm_java: `${downloadBaseUrl}/tableauhyperapi-java-macos-arm64-release-main.${version_long}.zip`,

linux_py: `${downloadBaseUrl}/tableauhyperapi-${version_short}-py3-none-macosx_13_0_arm64.whl`,
linux_py: `${downloadBaseUrl}/tableauhyperapi-${version_short}-py3-none-manylinux2014_x86_64.whl`,
linux_cxx: `${downloadBaseUrl}/tableauhyperapi-cxx-linux-x86_64-release-main.${version_long}.zip`,
linux_java: `${downloadBaseUrl}/tableauhyperapi-java-linux-x86_64-release-main.${version_long}.zip`,

Expand Down
Loading