跳至主要内容
版本:v4

3.1 FAQ

關於產品支援

Q: Canner Enterprise 可以提供客製化的 SLA 嗎?

有的,Canner 提供企業基本的 SLA 以及進階企業級的 SLA 不論是您是發佈在地端或雲端版本,您可以直接接觸我們的業務了解詳情 sales@cannerdata.com

關於 SQL Engine

Q: 系統當到系統限制時是會暫停、還是暫緩執行?

目前 Canner Enterprise 是會把所需當次的 SQL 所需運算的資料拉到 RAM,如單次工作資料量超過負荷就會 out of memory,就需要額外購買更大 License。

Q: 虛擬資料庫中的欄位改變怎麼辦?

在 Canner Enterprise 有個 Schema 的 detector 會定期追蹤系統中的 schema 異動,如有異動會通知 Admin 改變的項目,讓 Admin 能夠去追蹤哪些欄位有異動以及影響到哪些虛擬資料庫的欄位。

Q: Canner Enterprise 使用的 SQL 語法?

Canner 是使用標準 ANSI SQL

關於資料儲存

Q: Canner Enterprise 可以建置在企業內部的雲嗎?

Canner Enterprise 不論是在雲或是地端,都是建置在企業的雲以及伺服器中,所有資料都不會出企業內部,資料也都保留於企業內。

Q: Canner Enterprise 整理好的資料落地放在哪?

  • 地端:Canner Enterprise 會存在 SSD 裡面
  • 雲端:Canner Enterprise 會存在 Cloud Data Lake 中像是 S3 (AWS), Blob storage (Azure)

Q: 有 Cache 功能嗎?Cache 多久清一次?

Canner Enterprise 有 Cache 功能,Cache 目前 Default 為 7 天。如大型企業可以客製清理的時間。

關於資料整合

Q: Canner Enterprise 可串 Source API 嗎?

目前不支援直接連結 API 接口,但您可以把 API 用傳統方式存到資料庫中再接過來即可。

Q: 使用 Canner Enterprise 如果要如果要寫回去資料庫呢?

您能夠透過 ETL 軟體把 Canner Enterprise 當作一個 source 在使用 ETL 工具把資料回存到資料庫或是 Storage 中。

Q: MongoDB 可以 Query 到幾層?

簡而言之,可以到很深入到無窮層的 Querying。

我們已以下資料為例

view_obj

{
"_id":"6192badb8b480205e9484a33",
"info":{
"name":"william",
"age":"30",
"friends":[
{
"name":"ken",
"age": 30
"home":{
"city":"Taipei",
"members":[
{
"name":"Grace",
"relationship":"mother"
},
{
"name":"PY",
"relationship":"father"
}
]
}
},
{
"name":"kevin",
"age": 35
"home":{
"city":"Tainan"
}
}
]
}
}

我們可以拆解到 nested 相當深層的欄位,以上述資料來說,以下範例提供基本的第二層欄位讀取

select
-- 第二層欄位
info.name,
info.age,
info.friends
from nested_07260

query two level

接下來到第三層欄位中,若有 array of object,常見的情境是希望可以攤平成 rows,後續不管是 join, where 等語法,或是任何 aggregation 等運算都可以延伸,這邊介紹 UNNEST 這個語法

(UNNEST: https://docs.cannerdata.com/product/sql/sql_select/#unnest)

-- 拆解第三層欄位 (info -> friends[] -> name)
select
info.name,
friend.name,
friend.age,
friend.home
from nested_21691
cross join unnest(info.friends) as friend(name, age, home)

query three level

我們可以再深入到第五層欄位,以下範例我們搭配 CTE (with statement),使用 unnest 語法把第五層中 nested array 中的欄位拉到第一層做使用

-- 拆解第五層欄位 (info -> friends[] -> home -> members[] -> name)
with friends as (
select
info.name as info_name,
friend.name as friend_name,
friend.age as friend_age,
friend.home as friend_home
from nested_21691
cross join unnest(info.friends) as friend(name, age, home)
)
select
info_name,
friend_name,
friend_age,
friend_home.city,
friend_home_member.name as friend_home_member_name,
friend_home_member.relationship as friend_home_member_relationship
from friends
cross join unnest(friend_home.members) as friend_home_member(name, relationship)

query five level

理論上,一般情境使用下很難碰到 Canner Enterprise 在 CTS 上的系統限制,所以可以到相當深層欄位的存取,但在實務上,過於 nested 的欄位若需要大量的使用 CTS,仍會造成 performance 上些許的影響。

Q: MongoDB 是巢狀,user 可否針對巢狀內容做 Search?可撈巢狀裡面的資料嗎?

Canner Enterprise 可處理複雜結構,像是 array, object,例如 https://docs.atlas.mongodb.com/sample-data/sample-analytics/#sample_analytics.transactions 這邊的 sample dataset 可以用下面這種方式 query

select
transactions[1].date
from transactions_96448
where any_match(transactions, t -> t.amount > 7000)

找出 transactions 這個 array-of-object field 中有任何 element 的 amount > 7000 的 row,並取出第一筆交易的 date

可以參考 Array document: https://docs.cannerdata.com/product/sql/functions/array