Spark SQL----NULL語義

Spark SQL----NULL語義

  • 一、比較運算符中的空處理
  • 二、邏輯運算符中的空處理
  • 三、表達式中的空處理
    • 3.1 null-intolerant表達式中的空處理
    • 3.2 可以處理空值操作數的空處理表達式
    • 3.3 內置聚合表達式中的空處理
  • 四、WHERE、HAVING和JOIN子句中的條件表達式的空處理
  • 五、在GROUP BY和DISTINCT中空處理
  • 六、在ORDER BY中的空處理
  • 七、UNION, INTERSECT, EXCEPT中的空處理
  • 八、EXISTS 和NOT EXISTS 子查詢中的空處理
  • 九、IN 和 NOT IN 子查詢中的空處理

表由一組行組成,每行包含一組列。列與數據類型相關聯,表示實體的特定屬性(例如,age 是一個名為person的實體的列)。有時,特定于行的列的值在該行出現時是未知的。在SQL中,這些值表示為NULL。本節詳細介紹了在各種運算符、表達式和其他SQL構造中處理NULL值的語義。
下面說明了名為person的表的schema layout和數據。數據在年齡列中包含NULL值,該表將用于以下各節中的各種示例。
TABLE: person

IdNameAge
100Joe30
200MarryNULL
300Mike18
400Fred50
500AlbertNULL
600Michelle30
700Dan50

一、比較運算符中的空處理

Apache spark支持標準的比較運算符,如“>”、“>=”、“=”、”<“和”<=“。當其中一個操作數或兩個操作數都未知或為NULL時,這些運算符的結果為未知或NULL。為了比較NULL值的相等性,Spark提供了一個NULL安全的相等運算符(“<=>”),當其中一個操作數為NULL時,該運算符返回False,當兩個操作數均為NULL時返回True。下表說明了當一個或兩個操作數都為NULL時比較運算符的行為`:

Left OperandRight Operand>>==<<=<=>
NULLAny valueNULLNULLNULLNULLNULLFalse
Any valueNULLNULLNULLNULLNULLNULLFalse
NULLNULLNULLNULLNULLNULLNULLTrue
例子:
-- Normal comparison operators return `NULL` when one of the operand is `NULL`.
SELECT 5 > null AS expression_output;
+-----------------+
|expression_output|
+-----------------+
|             null|
+-----------------+-- Normal comparison operators return `NULL` when both the operands are `NULL`.
SELECT null = null AS expression_output;
+-----------------+
|expression_output|
+-----------------+
|             null|
+-----------------+-- Null-safe equal operator return `False` when one of the operand is `NULL`
SELECT 5 <=> null AS expression_output;
+-----------------+
|expression_output|
+-----------------+
|            false|
+-----------------+-- Null-safe equal operator return `True` when one of the operand is `NULL`
SELECT NULL <=> NULL;
+-----------------+
|expression_output|
+-----------------+
|             true|
+-----------------+

二、邏輯運算符中的空處理

Spark支持標準邏輯運算符,如AND、OR和NOT。這些運算符將布爾表達式作為參數,并返回布爾值。
下表說明了當一個或兩個操作數都為NULL時邏輯運算符的行為。

Left OperandRight OperandORAND
TrueNULLTrueNULL
FalseNULLNULLFalse
NULLTrueTrueNULL
NULLFalseNULLFalse
NULLNULLNULLNULL
operandNOT
NULLNULL

例子:

-- Normal comparison operators return `NULL` when one of the operands is `NULL`.
SELECT (true OR null) AS expression_output;
+-----------------+
|expression_output|
+-----------------+
|             true|
+-----------------+-- Normal comparison operators return `NULL` when both the operands are `NULL`.
SELECT (null OR false) AS expression_output
+-----------------+
|expression_output|
+-----------------+
|             null|
+-----------------+-- Null-safe equal operator returns `False` when one of the operands is `NULL`
SELECT NOT(null) AS expression_output;
+-----------------+
|expression_output|
+-----------------+
|             null|
+-----------------+

三、表達式中的空處理

比較運算符和邏輯運算符在Spark中被視為表達式。除了這兩種表達式之外,Spark還支持其他形式的表達式,如函數表達式、強制轉換表達式等。Spark中的表達式大致可分為:

  • Null intolerant表達式
  • 可以處理NULL值操作數的表達式
    • 這些表達式的結果取決于表達式本身。

3.1 null-intolerant表達式中的空處理

當表達式的一個或多個參數為Null時,Null intolerant表達式返回Null,大多數表達式屬于這一類。
例子:

SELECT concat('John', null) AS expression_output;
+-----------------+
|expression_output|
+-----------------+
|             null|
+-----------------+SELECT positive(null) AS expression_output;
+-----------------+
|expression_output|
+-----------------+
|             null|
+-----------------+SELECT to_date(null) AS expression_output;
+-----------------+
|expression_output|
+-----------------+
|             null|
+-----------------+

3.2 可以處理空值操作數的空處理表達式

這類表達式被設計用來處理NULL值。表達式的結果取決于表達式本身。例如,函數表達式isnull在輸入為空時返回true,在輸入為非空時返回false,而函數coalesce返回其操作數列表中的第一個非null值。但是,coalesce在其所有操作數為NULL時返回NULL。下面是這類表達的不完整列表。

  • COALESCE
  • NULLIF
  • IFNULL
  • NVL
  • NVL2
  • ISNAN
  • NANVL
  • ISNULL
  • ISNOTNULL
  • ATLEASTNNONNULLS
  • IN

例子:

SELECT isnull(null) AS expression_output;
+-----------------+
|expression_output|
+-----------------+
|             true|
+-----------------+-- Returns the first occurrence of non `NULL` value.
SELECT coalesce(null, null, 3, null) AS expression_output;
+-----------------+
|expression_output|
+-----------------+
|                3|
+-----------------+-- Returns `NULL` as all its operands are `NULL`. 
SELECT coalesce(null, null, null, null) AS expression_output;
+-----------------+
|expression_output|
+-----------------+
|             null|
+-----------------+SELECT isnan(null) AS expression_output;
+-----------------+
|expression_output|
+-----------------+
|            false|
+-----------------+

3.3 內置聚合表達式中的空處理

聚合函數通過處理一組輸入行來計算單個結果。下面是聚合函數如何處理NULL值的規則。

  • NULL值在所有聚合函數的處理過程中被忽略。
    • 此規則的唯一例外是COUNT(*)函數。
  • 當所有輸入值為NULL或輸入數據集為空時,一些聚合函數返回NULL。這些函數的列表如下:
    • MAX
    • MIN
    • SUM
    • AVG
    • EVERY
    • ANY
    • SOME
      例子:
-- `count(*)` does not skip `NULL` values.
SELECT count(*) FROM person;
+--------+
|count(1)|
+--------+
|       7|
+--------+-- `NULL` values in column `age` are skipped from processing.
SELECT count(age) FROM person;
+----------+
|count(age)|
+----------+
|         5|
+----------+-- `count(*)` on an empty input set returns 0. This is unlike the other
-- aggregate functions, such as `max`, which return `NULL`.
SELECT count(*) FROM person where 1 = 0;
+--------+
|count(1)|
+--------+
|       0|
+--------+-- `NULL` values are excluded from computation of maximum value.
SELECT max(age) FROM person;
+--------+
|max(age)|
+--------+
|      50|
+--------+-- `max` returns `NULL` on an empty input set.
SELECT max(age) FROM person where 1 = 0;
+--------+
|max(age)|
+--------+
|    null|
+--------+

四、WHERE、HAVING和JOIN子句中的條件表達式的空處理

WHERE、HAVING操作符根據用戶指定的條件過濾行。JOIN操作符用于根據連接條件組合來自兩個表的行。對于所有這三種操作符,條件表達式都是布爾表達式,可以返回True、False或Unknown (NULL)。如果條件的結果為True,則表示“滿足”。
例子:

-- Persons whose age is unknown (`NULL`) are filtered out from the result set.
SELECT * FROM person WHERE age > 0;
+--------+---+
|    name|age|
+--------+---+
|Michelle| 30|
|    Fred| 50|
|    Mike| 18|
|     Dan| 50|
|     Joe| 30|
+--------+---+-- `IS NULL` expression is used in disjunction to select the persons
-- with unknown (`NULL`) records.
SELECT * FROM person WHERE age > 0 OR age IS NULL;
+--------+----+
|    name| age|
+--------+----+
|  Albert|null|
|Michelle|  30|
|    Fred|  50|
|    Mike|  18|
|     Dan|  50|
|   Marry|null|
|     Joe|  30|
+--------+----+-- Person with unknown(`NULL`) ages are skipped from processing.
SELECT age, count(*) FROM person GROUP BY age HAVING max(age) > 18;
+---+--------+
|age|count(1)|
+---+--------+
| 50|       2|
| 30|       2|
+---+--------+-- A self join case with a join condition `p1.age = p2.age AND p1.name = p2.name`.
-- The persons with unknown age (`NULL`) are filtered out by the join operator.
SELECT * FROM person p1, person p2WHERE p1.age = p2.ageAND p1.name = p2.name;
+--------+---+--------+---+
|    name|age|    name|age|
+--------+---+--------+---+
|Michelle| 30|Michelle| 30|
|    Fred| 50|    Fred| 50|
|    Mike| 18|    Mike| 18|
|     Dan| 50|     Dan| 50|
|     Joe| 30|     Joe| 30|
+--------+---+--------+---+-- The age column from both legs of join are compared using null-safe equal which
-- is why the persons with unknown age (`NULL`) are qualified by the join.
SELECT * FROM person p1, person p2WHERE p1.age <=> p2.ageAND p1.name = p2.name;
+--------+----+--------+----+
|    name| age|    name| age|
+--------+----+--------+----+
|  Albert|null|  Albert|null|
|Michelle|  30|Michelle|  30|
|    Fred|  50|    Fred|  50|
|    Mike|  18|    Mike|  18|
|     Dan|  50|     Dan|  50|
|   Marry|null|   Marry|null|
|     Joe|  30|     Joe|  30|
+--------+----+--------+----+

五、在GROUP BY和DISTINCT中空處理

如章節一比較運算符中的空處理中所討論的,兩個NULL值不相等。但是,出于分組和不同處理的目的,將具有NULL數據的兩個或多個值分組到同一個bucket中。這種行為符合SQL標準和其他企業數據庫管理系統。
例子:

-- `NULL` values are put in one bucket in `GROUP BY` processing.
SELECT age, count(*) FROM person GROUP BY age;
+----+--------+
| age|count(1)|
+----+--------+
|null|       2|
|  50|       2|
|  30|       2|
|  18|       1|
+----+--------+-- All `NULL` ages are considered one distinct value in `DISTINCT` processing.
SELECT DISTINCT age FROM person;
+----+
| age|
+----+
|null|
|  50|
|  30|
|  18|
+----+

六、在ORDER BY中的空處理

Spark SQL在ORDER BY子句中支持空排序規范。Spark處理ORDER BY子句時,首先或最后放置所有NULL值,這取決于空排序規范。默認情況下,所有NULL值放在首位。
例子:

-- `NULL` values are shown at first and other values
-- are sorted in ascending way.
SELECT age, name FROM person ORDER BY age;
+----+--------+
| age|    name|
+----+--------+
|null|   Marry|
|null|  Albert|
|  18|    Mike|
|  30|Michelle|
|  30|     Joe|
|  50|    Fred|
|  50|     Dan|
+----+--------+-- Column values other than `NULL` are sorted in ascending
-- way and `NULL` values are shown at the last.
SELECT age, name FROM person ORDER BY age NULLS LAST;
+----+--------+
| age|    name|
+----+--------+
|  18|    Mike|
|  30|Michelle|
|  30|     Joe|
|  50|     Dan|
|  50|    Fred|
|null|   Marry|
|null|  Albert|
+----+--------+-- Columns other than `NULL` values are sorted in descending
-- and `NULL` values are shown at the last.
SELECT age, name FROM person ORDER BY age DESC NULLS LAST;
+----+--------+
| age|    name|
+----+--------+
|  50|    Fred|
|  50|     Dan|
|  30|Michelle|
|  30|     Joe|
|  18|    Mike|
|null|   Marry|
|null|  Albert|
+----+--------+

七、UNION, INTERSECT, EXCEPT中的空處理

在集合操作的上下文中,以null-safe的方式比較NULL值是否相等。這意味著在比較行時,兩個NULL值被認為是相等的,這與常規的EqualTo(=)操作符不同。
例子:

CREATE VIEW unknown_age SELECT * FROM person WHERE age IS NULL;-- Only common rows between two legs of `INTERSECT` are in the 
-- result set. The comparison between columns of the row are done
-- in a null-safe manner.
SELECT name, age FROM personINTERSECTSELECT name, age from unknown_age;
+------+----+
|  name| age|
+------+----+
|Albert|null|
| Marry|null|
+------+----+-- `NULL` values from two legs of the `EXCEPT` are not in output. 
-- This basically shows that the comparison happens in a null-safe manner.
SELECT age, name FROM personEXCEPTSELECT age FROM unknown_age;
+---+--------+
|age|    name|
+---+--------+
| 30|     Joe|
| 50|    Fred|
| 30|Michelle|
| 18|    Mike|
| 50|     Dan|
+---+--------+-- Performs `UNION` operation between two sets of data. 
-- The comparison between columns of the row ae done in
-- null-safe manner.
SELECT name, age FROM personUNION SELECT name, age FROM unknown_age;
+--------+----+
|    name| age|
+--------+----+
|  Albert|null|
|     Joe|  30|
|Michelle|  30|
|   Marry|null|
|    Fred|  50|
|    Mike|  18|
|     Dan|  50|
+--------+----+

八、EXISTS 和NOT EXISTS 子查詢中的空處理

在Spark中,允許在WHERE子句中使用EXISTS和NOT EXISTS表達式。這些是返回TRUE或FALSE的布爾表達式。換句話說,EXISTS是一個成員條件,當它引用的子查詢返回一行或多行時返回TRUE。類似地,NOT EXISTS是一個非成員條件,當從子查詢返回no rows或zero rows時返回TRUE。這兩個表達式不受子查詢結果中存在NULL的影響。它們通常更快,因為它們可以轉換為semijoins / anti-semijoins,而無需為null感知提供特殊規定。
例子:

-- Even if subquery produces rows with `NULL` values, the `EXISTS` expression
-- evaluates to `TRUE` as the subquery produces 1 row.
SELECT * FROM person WHERE EXISTS (SELECT null);
+--------+----+
|    name| age|
+--------+----+
|  Albert|null|
|Michelle|  30|
|    Fred|  50|
|    Mike|  18|
|     Dan|  50|
|   Marry|null|
|     Joe|  30|
+--------+----+-- `NOT EXISTS` expression returns `FALSE`. It returns `TRUE` only when
-- subquery produces no rows. In this case, it returns 1 row.
SELECT * FROM person WHERE NOT EXISTS (SELECT null);
+----+---+
|name|age|
+----+---+
+----+---+-- `NOT EXISTS` expression returns `TRUE`.
SELECT * FROM person WHERE NOT EXISTS (SELECT 1 WHERE 1 = 0);
+--------+----+
|    name| age|
+--------+----+
|  Albert|null|
|Michelle|  30|
|    Fred|  50|
|    Mike|  18|
|     Dan|  50|
|   Marry|null|
|     Joe|  30|
+--------+----+

九、IN 和 NOT IN 子查詢中的空處理

在Spark中,允許在查詢的WHERE子句中使用IN和NOT IN表達式。與EXISTS表達式不同,IN表達式可以返回TRUE、FALSE或UNKNOWN(NULL)值。從概念上講,IN表達式在語義上等價于由disjunctive運算符(OR)分隔的一組相等條件。例如,c1 IN (1, 2, 3)在語義上等價于 (C1 = 1 OR c1 = 2 OR c1 = 3)。
就處理NULL值而言,語義可以從比較運算符(=)和邏輯運算符(OR)中的NULL值處理中推導出來。總之,以下是計算IN表達式結果的規則。

  • 當在列表中找到有問題的非NULL值時,返回TRUE
  • 當在列表中找不到非NULL值并且列表中不包含NULL值時,返回FALSE
  • 當值為NULL,或者在列表中找不到非NULL值并且列表至少包含一個NULL值時,返回UNKNOWN

當列表包含NULL時,NOT IN總是返回UNKNOWN,與輸入值無關。這是因為如果值不在包含NULL的列表中,IN將返回UNKNOWN,并且因為not UNKNOWN再次為UNKNOW。
例子:

-- The subquery has only `NULL` value in its result set. Therefore,
-- the result of `IN` predicate is UNKNOWN.
SELECT * FROM person WHERE age IN (SELECT null);
+----+---+
|name|age|
+----+---+
+----+---+-- The subquery has `NULL` value in the result set as well as a valid 
-- value `50`. Rows with age = 50 are returned. 
SELECT * FROM personWHERE age IN (SELECT age FROM VALUES (50), (null) sub(age));
+----+---+
|name|age|
+----+---+
|Fred| 50|
| Dan| 50|
+----+---+-- Since subquery has `NULL` value in the result set, the `NOT IN`
-- predicate would return UNKNOWN. Hence, no rows are
-- qualified for this query.
SELECT * FROM personWHERE age NOT IN (SELECT age FROM VALUES (50), (null) sub(age));
+----+---+
|name|age|
+----+---+
+----+---+

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/43506.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/43506.shtml
英文地址,請注明出處:http://en.pswp.cn/web/43506.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Camera Raw:直方圖

Camera Raw 的直方圖 Histogram面板不僅提供了照片亮度和色彩分布信息&#xff0c;還具備多項實用功能&#xff0c;輔助評估和調整照片。 ◆ ◆ ◆ 直方圖的構成 直方圖是一個二維坐標系統&#xff0c;橫坐標表示不同程度的像素亮度&#xff0c;從左到右通常對應的是 0 ~ 255…

升級springboot3.2集成shiro的問題

由于之前的springcloud相關版本太久&#xff0c;很多新功能無法使用&#xff0c;所以打算抽時間把代碼的版本做一下升級。使用最新版的springboot3.2&#xff0c;發現shiro過濾器無效。經檢查發現原因&#xff1a; springboot3.x使用的是JDK17&#xff0c;從jdk8以后javax.serv…

視頻智能解析:Transformer模型在視頻理解的突破性應用

視頻智能解析&#xff1a;Transformer模型在視頻理解的突破性應用 隨著人工智能技術的飛速發展&#xff0c;視頻理解已成為計算機視覺領域的一個熱點問題。Transformer模型&#xff0c;以其在處理序列數據方面的強大能力&#xff0c;已經被廣泛應用于視頻理解任務中。本文將深…

Github 2024-07-11 Go開源項目日報 Top10

根據Github Trendings的統計,今日(2024-07-11統計)共有10個項目上榜。根據開發語言中項目的數量,匯總情況如下: 開發語言項目數量Go項目10Solidity項目1Python項目1frp: 一個開源的快速反向代理 創建周期:2946 天開發語言:Go協議類型:Apache License 2.0Star數量:75872 …

Spring的bean的生命周期——bean的創建與銷毀

1、生成類信息map 掃描包&#xff0c;用asm技術獲取類信息&#xff0c;打了ComponentScancomponentservice等注解的類會放入map。key是類名&#xff0c;value是beanDefinition類的基本信息 2、加載類 context.getBean("userService") 從類信息map中獲取beanDefin…

SSRF漏洞深入利用與防御方案繞過技巧

文章目錄 前言SSRF基礎利用1.1 http://內網資源訪問1.2 file:///讀取內網文件1.3 dict://探測內網端口 SSRF進階利用2.1 Gopher協議Post請求2.2 Gopher協議文件上傳2.3 GopherRedis->RCE2.4 JavaWeb中的適用性&#xff1f; SSRF防御繞過3.1 Url黑名單檢測的繞過3.2 Url白名單…

對controller層進行深入學習

目錄 1. controller層是干什么的&#xff1f;1.1 controller原理圖1.2 controller層為什么要存在&#xff1f;1.2.1 分離關注點1.2.2 響應HTTP請求1.2.3 數據處理與轉換1.2.4 錯誤處理與狀態管理1.2.5 流程控制1.2.6 依賴注入與測試 1.3 controller層的優點1.3.1 多端支持1.3.2…

Gin框架自定義路由

Gin框架是一個用Go語言&#xff08;Golang&#xff09;編寫的Web框架&#xff0c;它提供了靈活且高效的路由系統。在Gin框架中&#xff0c;自定義路由是一個基礎且重要的操作&#xff0c;它允許開發者定義應用程序如何處理不同的HTTP請求。以下是自定義路由的詳細步驟和方法&am…

Linux虛擬化大師:使用 KVM 和 QEMU 進行高級虛擬化管理

Linux 虛擬化大師&#xff1a;使用 KVM 和 QEMU 進行高級虛擬化管理 虛擬化技術是現代數據中心的核心技術之一&#xff0c;它可以將一臺物理服務器分割成多個虛擬機&#xff0c;從而提高資源利用率&#xff0c;降低成本&#xff0c;并增強系統的靈活性和可擴展性。KVM&#xf…

C++ | Leetcode C++題解之第225題用隊列實現棧

題目&#xff1a; 題解&#xff1a; class MyStack { public:queue<int> q;/** Initialize your data structure here. */MyStack() {}/** Push element x onto stack. */void push(int x) {int n q.size();q.push(x);for (int i 0; i < n; i) {q.push(q.front());…

C++ 【 Open3D 】 點云按高程進行賦色

一、 Open3D中根據點云的高程度信息為點云中的每個點附上顏色&#xff0c;并保存顏色渲染結果&#xff01; #include<iostream> #include<open3d/Open3D.h>using namespace std;int main() {//-------------------------------讀取點云--------------------------…

nasa數據集——1 度網格單元的全球月度土壤濕度統計數據

AMSR-E/Aqua level 3 global monthly Surface Soil Moisture Averages V005 (AMSRE_AVRMO) at GES DISC GES DISC 的 AMSR-E/Aqua 第 3 級全球地表土壤水分月平均值 V005 (AMSRE_AVRMO) AMSR-E/Aqua level 3 global monthly Surface Soil Moisture Standard Deviation V005 (…

優化 .NET Core 應用程序的安全性和性能以應對高負載

一. .NET Core 中的安全措施 1. 身份驗證和授權 實施強大的身份驗證和授權機制是保護應用程序資源的基礎。.NET Core 內置支持各種身份驗證方案&#xff0c;例如 JWT&#xff08;JSON Web 令牌&#xff09;、OAuth 和 OpenID Connect。通過配置身份驗證中間件并定義授權策略&…

vue中el-table單元格復制功能

一、單頁面中使用 1.在el-table上綁定單擊事件 cell-click“copyText” 或雙擊事件 cell-dblclick“copyText” 注&#xff1a;cell-dblclick函數有四個參數&#xff0c;分別是row, column, cell, event&#xff1b; row&#xff1a;可看到被其操作單元格所在行的所有的數據&…

【IT領域新生必看】解鎖 `final` 關鍵字的秘密:Java 編程中的終極武器

文章目錄 引言什么是 final 關鍵字&#xff1f;一、 final 變量final 局部變量final 實例變量final 靜態變量 二、 final 方法三、 final 類四、 final 關鍵字的實際應用1. 定義常量2. 防止方法被重寫3. 創建不可變類4. 優化性能 五、 final 的一些常見誤區1. final 變量不能在…

力扣995.K連續位的最小翻轉次數

力扣995.K連續位的最小翻轉次數 因為翻轉順序改變不影響最終結果 因此從頭找每個位置翻轉后的結果如果為0 將從它開始的K長的數組翻轉 class Solution {public:int minKBitFlips(vector<int>& nums, int k) {int n nums.size();vector<int> s(n1);int res0…

05.FFMPEG日志系統

一、頭文件 #include <libavutil/log.h> 二、常用函數 1、av_log_set_level void av_log_set_level(int level);該函數用于設置全局日志級別。 2、av_log void av_log(void* avcl, int level, const char* fmt, ...);該函數用于輸出日志消息。avcl 參數是相關聯的上下…

uboot學習:(三)目錄分析

目錄 目錄分析 uboot自帶 編譯生成的文件 分析之前需要編譯一次uboot源碼&#xff0c;編譯之后的uboot源碼會多出來很多文件 目錄分析 uboot自帶 api 與硬件無關的API函數arch 與架構體系有關的代碼 里面有x86,arm等架構文件夾 架構文件夾里面有cpu&#xff0c;設備樹等…

使用 Nuxt 3 搭建國際官網

搭建國際官網是一個復雜的任務,涉及多方面的技術和策略。在這篇文章中,我們將探討如何使用 Nuxt 3 框架搭建一個國際化官網,并展示其在 SEO 優勢和全棧可維護性方面的卓越性能。 使用 Nuxt 3 搭建國際官網 1. Nuxt 3 簡介 Nuxt 3 是一個基于 Vue 3 和 Vite 的框架,旨在構…

大數據面試題之ElasticSearch(2)

目錄 ElasticSearch的單播、多播和廣播 什么是Zen Discovery機制 ElasticSearch和Solr主要區別 ElasticSearch和Solr各自適用于哪些場景 Elasticsearch的同類產品有哪些 Elasticsearch有哪些主要應用場景 Elasticsearch 中執行搜索的各種可能方式有哪些 Elasticsearch 中…