從其他專案匯入檔案

您可以將其他 LookML 專案和外部存放區中的檔案匯入目前的專案。這樣一來,您就能在多個專案中使用模型檔案、檢視檔案和其他檔案。

這項功能有幾種用途。範例如下:

  • 在已安裝的 Looker 區塊上進行建構,不必直接變更區塊。如果 Looker 變更了區塊,您可以將變更內容拉入,因為您新增至該區塊的所有 LookML 都會保留在單獨的存放區中。

  • 維護根據資料庫結構定義自動產生的基礎專案。您可以將所有自訂維度、評估指標等放入單獨的專案,從自動產生的專案匯入所有 LookML。您可以定期重新產生基礎專案,以便在資料庫結構定義變更時,不必覆寫所有自訂 LookML。

  • 在單一專案中封裝共用物件,然後將這些物件匯入多個其他專案。舉例來說,如果您有一個多個資料庫都會用到的資料表,可以將該資料表的檢視畫面放入一個專案,並在該專案中維護。然後將該資料表匯入其他專案,讓多個專案都能使用這份資料。

如要從其他專案匯入檔案,請執行下列工作:

  1. 建立專案資訊清單檔案
  2. 指定要匯入的本機遠端專案。
  3. 查看匯入專案中的檔案
  4. 納入匯入專案中的檔案

接著,您就可以參照匯入專案檔案中的欄位,並覆寫匯入專案中定義的常數值 (如果常數允許覆寫)。

建立專案資訊清單檔案

任何從其他專案匯入檔案的專案都必須有專案資訊清單檔案。如果專案中沒有資訊清單檔案,您可以透過 Looker IDE 檔案瀏覽器頂端的 + 圖示建立資訊清單檔案

如要匯入專案,請在資訊清單中指定專案。您可以指定本機遠端專案,如以下各節所述。

匯入本機專案

只有在匯入的專案位於相同 Looker 執行個體時,才能使用本機專案匯入功能。此外,我們也建議開發人員具備匯入專案模型的模型權限。如果開發人員在匯入的專案中擁有模型權限,版本管理會是動態的,也就是說,匯入專案中的變更會立即影響匯入專案。這可讓開發人員在推送至正式版前,先驗證兩個專案中的變更。此外,如果開發人員在兩個專案中都有模型權限,匯入的專案檔案會反映開發人員的開發模式狀態。因此,如果開發人員處於開發模式,Looker IDE 就會顯示匯入專案檔案的開發模式。如果開發人員處於正式版模式,Looker IDE 會顯示匯入專案的正式版模式。

在資訊清單檔案中,project_name 參數會指定目前專案的名稱 (當您為專案建立資訊清單檔案時,Looker 會自動填入這個參數)。如要將本機專案匯入目前專案,請使用一或多個 local_dependency 參數,指定要匯入的專案:

# This project
project_name: "my_project"

# The project to import
local_dependency: {
  project: "my_other_project"
}

在下列情況下,您應使用遠端專案匯入功能,而非本機專案匯入功能:

  • 開發人員在匯入的專案模型中沒有模型權限。在這種情況下,Looker 會複製匯入專案的正式版模式,並在 IDE 中顯示檔案的靜態版本。這個靜態版本永遠不會顯示檔案的開發模式版本,而且可能會與目前的正式版版本不符,且不會向開發人員發出警告。建議您使用遠端專案匯入功能,並提供 ref,指定遠端專案中的 Git 分支或 Git 版本。這樣做之後,Looker 會自動偵測遠端專案中的新修訂版本,以便通知開發人員,讓他們能夠導入最新版本的遠端專案檔案。
  • 開發人員必須一律使用匯入專案的正式版。
  • 開發人員必須使用匯入專案檔案的靜態版本。

匯入遠端專案

在遠端匯入作業中,匯入的專案不必位於相同的執行個體。而是透過遠端 Git 存放區匯入專案。

如要匯入遠端存放區,請使用 remote_dependency 參數提供遠端存放區的資訊。remote_dependency 參數會採用下列資訊和子參數:

  • 匯入專案的名稱,可自行命名。在以下範例中,專案名稱為 ga_360_block。您可以在 include 陳述式中使用這個名稱,參照 LookML 專案中已匯入的檔案。這個名稱也會用來做為 Looker IDE imported_projects 資料夾下方的資料夾名稱
  • url 子參數,可用於指定外部 Git 存放區的地址。使用存放區的主要網址。
  • ref 子參數:您可以在其中指定 Git 分支版本、Git 發布標記或 Git 存放區中修訂版本的 SHA。如果您想要使用靜態版本,可以指定提交 SHA,這樣匯入專案中的變更就不會自動反映在專案中 (這是 Looker 區塊的理想選項)。或者,如果您希望 Looker 自動偵測遠端專案中的新修訂版本,也可以指定 Git 分支或 Git 發布版本標記。如需更多資訊,請參閱本頁的「自動偵測遠端專案的新版本」一節。
  • override_constant 子參數:這是選用子參數,可讓您覆寫在匯入專案中定義的常數值。

以下是專案資訊清單檔案中的 remote_dependency 參數範例。本範例使用 HTTPS 連線:

remote_dependency: ga360_block {
  url: "https://github.com/llooker/google_ga360"
  ref: "master"
  override_constant: connection {
    value: "importing_project_connection"
  }
}

您也可以使用 SSH:

remote_dependency: ga360_block {
  url: "git@github.com:llooker/google_ga360.git"
  ref: "master"
  override_constant: connection {
    value: "importing_project_connection"
  }
}

新增遠端依附元件後,您可能需要為遠端專案設定匯入憑證,請參閱本頁的「設定私人遠端存放區的驗證憑證」一節。

自動偵測遠端專案的新版本

如果您在資訊清單檔案的 remote_dependency ref 子參數中指定 Git 分支或 Git 發布標記,Looker 就能自動偵測遠端專案中的新修訂版本。

舉例來說,以下是遠端依附元件,其中 master 分支是在 ref 子參數中指定:

remote_dependency: exchange_rate {
  url: "https://github.com/llooker/datablocks-exchangerate.git"
  ref: "master"
}

接著,當 master 分支使用新的提交內容更新時,Looker 就會自動偵測變更。

以下是指定 v1.0 版本標記的範例:

remote_dependency: e_faa_original {
  url: "https://github.com/llooker/google_ga360"
  ref: "v1.0"
}

無論您為 ref 參數指定的值類型為何 (甚至是 SHA 提交),當您在專案中新增 remote_dependency 參數時,IDE 都會在頂端專案導覽列中顯示「Update Dependencies」按鈕。

按一下「Update Dependencies」,即可匯入遠端專案檔案。如果這是您在專案中新增的第一個遠端依附元件,更新依附元件時,Looker 也會一併建立資訊清單鎖定檔案。Looker 會使用資訊清單鎖定檔案追蹤遠端專案的版本。

如果您在 ref 子參數中指定 Git 分支或 Git 發布標記,Looker 會在 Looker IDE 重新整理時檢查是否有新的修訂版本,這會在 Looker 開發人員進入開發模式、在 IDE 中執行 Git 動作,或重新整理瀏覽器時發生。

如果有新的修訂版本,Looker 會在 IDE 的 Git 動作面板中顯示「Update Dependencies」選項。

選取「Update Dependencies」選項,將最新的遠端專案檔案匯入專案。

取得最新檔案後,您可以驗證 LookML,確認所有專案參照都能與更新後的遠端專案檔案搭配運作。接著,您可以修正任何無效參照,並在無需讓使用者停機的情況下部署變更。

資訊清單鎖定檔案

Looker 會使用檔案名稱為 manifest_lock.lkml 的資訊清單鎖定檔案,追蹤遠端匯入專案的版本。資訊清單鎖定檔案會列在 Looker IDE 的檔案瀏覽器面板中。

Looker 開發人員不需要建立或編輯資訊清單鎖定檔案,因為鎖定檔案會由 Looker 自動管理。

資訊清單鎖定檔案會顯示每個遠端專案,並以 remote_dependency 項目表示,其中包含 urlref 子參數:

  • remote_dependency 參數代表 Looker 開發人員在資訊清單檔案中指定的遠端專案名稱。
  • url 子參數代表 Looker 開發人員在資訊清單檔案中指定的外部 Git 存放區地址。
  • ref 子參數會顯示 Looker 在專案中使用的專案版本 (以提交 SHA 表示):
    • 如果在資訊清單檔案中,使用 Git 分支版本或 Git 發布標記的 ref 定義遠端專案,ref 參數會顯示專案目前使用的檔案版本 (遠端專案修訂版本 SHA)。如果遠端專案中有新的修訂版本,Looker 會在 IDE 中顯示「Update Dependencies」按鈕,方便您匯入最新的遠端專案檔案。資訊清單鎖定檔案中的 ref 值隨後會更新,以顯示該分支或發布標記的最新 SHA 修訂版本。
    • 如果在資訊清單檔案中定義遠端專案,並使用特定版本 SHA 的 ref,資訊清單鎖定檔案中的 ref 參數會與該版本 SHA 相同。

設定私人遠端存放區的驗證憑證

如要設定私人遠端存放區的驗證憑證,請在 IDE 的左側導覽窗格中選取「Settings」圖示 ,前往「Import Credentials」頁面。

「Import Credentials」設定會顯示專案資訊清單檔案中定義的每個遠端存放區的網址清單、用於存放區的驗證類型 (httpsssh),以及 Looker 是否能成功連線至存放區。

新增驗證憑證

如何為存放區新增驗證憑證:

  1. 在「Import Credentials」頁面中,將滑鼠游標懸停在「URL」標題下方的存放區名稱上,即可顯示「Test」和「Configure」按鈕,接著按一下「Configure」

  2. Looker 會顯示「Configure Git Authentication」對話方塊,讓您設定遠端存放區的憑證。對話方塊會指出該特定存放區需要的憑證類型。

    • 如果儲存庫需要使用者名稱和密碼 (或個人存取權杖) 進行驗證,請輸入使用者名稱和密碼或權杖,然後按一下「儲存變更」

    • 如果存放區需要 SSH 金鑰 (例如前文說明的使用 SSH 匯入遠端專案範例),Looker 就會顯示對話方塊,顯示本機 SSH 金鑰。按一下「複製金鑰」,將安全殼層金鑰複製到剪貼簿,並將其新增至存放區的金鑰清單。

  3. 儲存憑證後,請按一下「Test」,測試 Looker 對存放區的存取權。

    通過連線測試並連線至存放區後,「Import Credentials」部分的存放區名稱旁會顯示綠色勾號。

編輯驗證憑證

如要編輯存放區的驗證憑證,請按照下列步驟操作:

  1. 如要顯示「測試」和「編輯」按鈕,請將游標懸停在已設定驗證憑證的存放區上,然後按一下「編輯」

  2. 如果存放區需要使用者名稱和密碼 (或個人存取權杖) 進行驗證,請按一下「清除憑證」,然後在確認對話方塊中按一下「是,清除憑證」

  3. 在「Configure Git Authentication」對話方塊中輸入新的憑證,然後按一下「Save Changes」

查看匯入專案中的檔案

Looker IDE 會在左側導覽窗格的 imported_projects 資料夾中顯示匯入的專案檔案。您可以選取匯入的專案檔案,查看其內容。

本機專案遠端專案的檔案會列在 imported_projects 資料夾中。

您也可以透過物件瀏覽器查看匯入專案檔案中的物件,這些物件包含在有效專案中。透過 Looker IDE 的導覽列存取物件瀏覽器。

此外,擁有 develop 權限的使用者可以透過中繼資料面板,查看匯入專案中物件的相關資訊,包括連結,可前往定義物件的匯入檔案。詳情請參閱「LookML 物件中繼資料」說明文件頁面。

納入匯入專案中的檔案

模型檔案中的 include 參數會指定該模型可用的專案檔案。在資訊清單檔案中指定本機遠端匯入的專案後,您就可以在模型檔案中使用 include 參數,指定匯入專案中的檔案。只有清單中列出專案的檔案才能納入。

如要include其他專案中的檔案,請使用檔案名稱加上兩個正斜線 (//) 和匯入專案的名稱。在匯入的專案名稱後方加上一個正斜線 (/),接著輸入要納入的檔案完整路徑。

舉例來說,下列 include 指令會指出 e_flights 匯入專案中的 users 檢視畫面檔案,以及 e_commerce 匯入專案中的 orders 檢視畫面:

include: "//e_flights/views/users.view.lkml"
include: "//e_commerce/public/orders.view.lkml"

如要瞭解如何在啟用 IDE 資料夾的情況下指定路徑,請參閱 include 參數頁面中的「路徑語法」部分。

您可以使用萬用字元納入多個檔案。舉例來說,如要納入 e_flights 匯入專案 /views/ 目錄中的所有檢視畫面檔案:

include: "//e_flights/views/*.view"

此外,您可以使用萬用字元,將範圍限制在匯入專案中的特定目錄層級或遞迴目錄:

include: "//e_flights/*/*.view.lkml"
include: "//e_commerce/*/*.view.lkml"

如要瞭解如何在啟用 IDE 資料夾的情況下使用萬用字元,請參閱 include 參數頁面中的「萬用字元範例」一節。

納入模型檔案

您無法加入其他專案的模型檔案。相反地,如果您想在不同專案中重複使用、精簡擴充「探索」功能,可以在匯入的專案中建立個別的「探索」檔案,然後將該「探索」檔案納入其他專案。詳情請參閱 include 參數說明文件頁面中的「在模型中加入 Explore」一節。

包含其他檔案的檔案

當您納入包含其他檔案的檔案時,系統會先解析所有納入項目,再將檔案傳遞至納入該檔案的下一個專案。

舉例來說,如果您在目前專案中匯入另一個專案 (proj_A) 的檔案 (A),且匯入的檔案包含 proj_B 專案的檔案 Binclude 參數,則檔案 B 會在檔案 A 匯入目前專案前,先納入檔案 A

匯入資料檔案

系統不會匯入儲存在專案 資料部分中的檔案。如要參照已匯入專案中的資料檔案 (例如 map_layer 參數),請使用檔案的完整路徑和檔案名稱。例如:

map_layer: json_from_imported_project {
  file: "//path_to_imported_project/folder/filename.topojson"
  ...
}

參照匯入專案中的檔案

將檢視畫面檔案匯入專案後,您可以使用語法 ${view_name.field_name} 參照匯入的檢視畫面欄位,就好像檢視畫面檔案是該專案的一部分一樣。舉例來說,假設您已在專案資訊清單檔案中匯入 ga_360_block 專案,且模型檔案中含有下列 include 陳述式:

include: "//ga_360_block/ga_block.view"

您可以使用語法 ${ga_block.hits_total} 參照所附 ga_block 檢視畫面中的 hits_total 欄位。

在匯入專案的檔案中使用常數

LookML 常數可讓您在專案的資訊清單檔案中定義值,以便在整個專案中重複使用。constant 參數的 export 子參數會指定在參照該常數的檔案匯入其他專案時,是否可以覆寫常數的值。

export 參數的可用值如下:

  • noneexport 的預設值。您無法在匯入專案中覆寫常數的值。匯入專案會使用匯入專案資訊清單檔案中指定的常數值。
  • override_optional:您可以選擇在匯入專案中覆寫常數的值。如果匯入專案的資訊清單檔案中未提供值,系統會使用匯入專案中的原始值。
  • override_required:匯入專案必須覆寫匯入專案資訊清單檔案中原先指定的常數值。如果匯入專案中未提供新的常數值,Looker 會顯示錯誤。

將參照常數的檔案匯入專案時,您可以使用專案資訊清單檔案中的 local_dependencyremote_dependencyoverride_constant 子參數,為該常數提供新值,前提是該常數在原始專案中將 export 設為 override_optionaloverride_required。當您覆寫匯入專案中常數的值時,專案會使用您透過 override_constant 參數指定的值。

舉例來說,假設您在單一 Looker 執行個體上管理多個資料庫,每個資料庫都有個別的專案。另外,假設每個資料庫的資料架構都相同,且您的目標是定義一次分析,然後套用至每個資料集。

在這個範例中,假設 proj_core 是您定義要匯入其他專案的檢視畫面的基礎專案。此外,您要匯入的其中一個檢視畫面是 orders 檢視畫面,其定義如下:


view: orders {
  sql_table_name: "@{schema_name}.orders"
}

orders 檢視畫面所依據的結構定義,是在 sql_table_name 參數中,使用 proj_core 資訊清單檔案中定義的 schema_name 常數指定。在以下範例中,由於 schema_name 常數設為 export: override_required,因此任何匯入 schema_name 的專案都必須使用 override_constant 參數覆寫其值:


constant: schema_name {
  value: "proj_core_schema"
  export: override_required
}

舉例來說,假設您想要將 orders 檢視畫面匯入名為 proj_a 的本機專案。proj_a 資料庫中也有一個名為 orders 的資料表,其結構與基礎專案 proj_core 中的 orders 資料表相同。

由於 proj_coreproj_a 位於同一個例項,因此您可以使用 local_dependencyorders 檢視畫面匯入 proj_a。您可以使用 local_dependencyoverride_constant 子參數,將 schema_name 常數更新為指向 proj_a 資訊清單檔案中的結構定義 proj_a_schema


project_name: "proj_a"

local_dependency: {
  project: "proj_core"
  override_constant: schema_name {
    value: "proj_a_schema"
  }
}

在這個範例中,由於 schema_name 常數在 project_core 中設為 export: override_required,因此如果您未在 proj_a (匯入專案) 中覆寫該值,Looker 就會顯示錯誤。

您可以覆寫 proj_a 中的 schema_name 常數,以便使用 proj_coreorders 檢視畫面中定義的欄位,而非建立新的檢視畫面檔案,並從頭定義欄位。在這個範例中,orders 檢視畫面會對應至每個專案的不同資料表:

  • proj_core 中,orders 檢視畫面會根據資料庫中的 proj_core_schema.orders 資料表。
  • proj_a 中,orders 檢視畫面會根據資料庫中的 proj_a_schema.orders 資料表。