4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Databricks にてテーブルやビューにおける日本語の利用可否の検証

Last updated at Posted at 2023-10-12

概要

Databricks にてテーブルやビューにて日本語を利用可否の検証結果を共有します。メタストアごとの検証結果として、次表の結果となりました。Unity Catalog を利用すれば日本語を基本的に利用できるようですが、Hive Metastore を利用する場合には テーブルのカラムのみ利用できるがビューで利用するとエラーとなるようです。検証に利用したコードとその結果を本記事では共有します。

# メタストア オブジェクト 日本語の利用可否
1 Unity Catalog カタログ名
2 Unity Catalog スキーマ名
3 Unity Catalog テーブル名
4 Unity Catalog テーブルのカラム
5 Unity Catalog ビュー名
6 Unity Catalog ビュー名のカラム
7 Hive Metastore スキーマ名 ×
8 Hive Metastore テーブル名 ×
9 Hive Metastore テーブルのカラム
10 Hive Metastore ビュー名 ×
11 Hive Metastore ビュー名のカラム ×

検証コードと結果

Unity Catalog

カタログの作成

%sql
CREATE CATALOG IF NOT EXISTS `カタログ`;

image.png

スキーマの作成

%sql
CREATE SCHEMA IF NOT EXISTS `カタログ`.`スキーマ`;

image.png

テーブルの作成

%sql
CREATE OR REPLACE TABLE `カタログ`.`スキーマ`.`テーブル`
(
  `ネーションキー` integer,
  `ネーション名` string,
  `リージョンキー` integer,
  `コメント` string,
  update_date date
);

image.png

%sql
INSERT INTO `カタログ`.`スキーマ`.`テーブル`
(
  `ネーションキー`,
  `ネーション名`,
  `リージョンキー`,
  `コメント`,
  update_date
)
SELECT
  N_NATIONKEY
  ,N_NAME
  ,N_REGIONKEY 
  ,N_COMMENT
  ,CAST(current_timestamp AS date) AS update_date
  FROM
    read_files(
      'dbfs:/databricks-datasets/tpch/data-001/nation/nation.tbl',
      format => 'csv',
      sep => '|',
      schema => '
        N_NATIONKEY  integer
        ,N_NAME       string
        ,N_REGIONKEY  integer 
        ,N_COMMENT    string
      ')
;

image.png

spark.table('`カタログ`.`スキーマ`.`テーブル`').display()

image.png

ビューの作成

%sql
CREATE VIEW `カタログ`.`スキーマ`.`ビュー`
AS
SELECT
  *
  FROM
    `カタログ`.`スキーマ`.`テーブル`

image.png

spark.table('`カタログ`.`スキーマ`.`ビュー`').display()

image.png

Hive Meatstore

スキーマの作成

%sql
CREATE SCHEMA IF NOT EXISTS hive_metastore.`スキーマ`;
AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException: MetaException(message:javax.jdo.JDOException: Exception thrown when executing query : SELECT 'org.apache.hadoop.hive.metastore.model.MDatabase' AS NUCLEUS_TYPE,A0.`DESC`,A0.DB_LOCATION_URI,A0.`NAME`,A0.OWNER_NAME,A0.OWNER_TYPE,A0.DB_ID FROM DBS A0 WHERE A0.`NAME` = ?

image.png

%sql
CREATE SCHEMA IF NOT EXISTS hive_metastore.schema_01;

image.png

テーブルの作成

%sql
CREATE OR REPLACE TABLE hive_metastore.schema_01.`テーブル`
(
  `ネーションキー` integer,
  `ネーション名` string,
  `リージョンキー` integer,
  `コメント` string,
  update_date date
);
AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException: Unable to fetch table テーブル

image.png

%sql
CREATE OR REPLACE TABLE hive_metastore.schema_01.table_01
(
  `ネーションキー` integer,
  `ネーション名` string,
  `リージョンキー` integer,
  `コメント` string,
  update_date date
);

image.png

%sql
INSERT INTO hive_metastore.schema_01.table_01
(
  `ネーションキー`,
  `ネーション名`,
  `リージョンキー`,
  `コメント`,
  update_date
)
SELECT
  N_NATIONKEY
  ,N_NAME
  ,N_REGIONKEY 
  ,N_COMMENT
  ,CAST(current_timestamp AS date) AS update_date
  FROM
    read_files(
      'dbfs:/databricks-datasets/tpch/data-001/nation/nation.tbl',
      format => 'csv',
      sep => '|',
      schema => '
        N_NATIONKEY  integer
        ,N_NAME       string
        ,N_REGIONKEY  integer 
        ,N_COMMENT    string
      ')
;

image.png

%sql
SELECT
  *
  FROM
    hive_metastore.schema_01.table_01

image.png

ビューの作成

%sql
CREATE VIEW hive_metastore.schema_01.`ビュー`
AS
SELECT
  *
  FROM
    hive_metastore.schema_01.table_01
AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException: Unable to fetch table ビュー

image.png

%sql
CREATE VIEW hive_metastore.schema_01.view_01
AS
SELECT
  *
  FROM
    hive_metastore.schema_01.table_01

image.png

%sql
SELECT
  *
  FROM
    hive_metastore.schema_01.view_01
AnalysisException: [INCOMPATIBLE_VIEW_SCHEMA_CHANGE] The SQL query of view `hive_metastore`.`schema_01`.`view_02` has an incompatible schema change and column ??????? cannot be resolved. Expected 2 columns named ??????? but got [].
Please try to re-create the view by running: CREATE OR REPLACE VIEW hive_metastore.schema_01.view_02  AS SELECT
  *
  FROM
    hive_metastore.schema_01.table_02.

image.png

カタログエクスプローラーで確認すると、次のように文字化けしていることを確認。

image.png

また、ソースのカラムが日本語でないカラムを日本語にした場合にも想定通りに動作しませんでした。

%sql
create or replace VIEW schema_01.vivew_02
AS
select
  "ab" AS `ネーションキー`
  ,"ab" AS `ネーション名`
  ,"ab" AS `リージョンキー`
  ,"ab" AS `コメント`
%sql
SELECT
  `ネーションキー`
  ,`ネーション名`
  ,`リージョンキー`
  ,`コメント`
  FROM schema_01.vivew_02
Error in SQL statement: AnalysisException: [UNRESOLVED_COLUMN.WITH_SUGGESTION] A column or function parameter with name `ネーションキー` cannot be resolved. Did you mean one of the following? [`????`, `??????`, `???????`, `???????`].; line 2 pos 2;
'Project ['ネーションキー, 'ネーション名, 'リージョンキー, 'コメント]
+- SubqueryAlias spark_catalog.schema_01.vivew_02
   +- View (`spark_catalog`.`schema_01`.`vivew_02`, [???????#5560,??????#5561,???????#5562,????#5563])
      +- Project [cast(???????#5556 as string) AS ???????#5560, cast(??????#5557 as string) AS ??????#5561, cast(???????#5558 as string) AS ???????#5562, cast(????#5559 as string) AS ????#5563]
         +- Project [ab AS ???????#5556, ab AS ??????#5557, ab AS ???????#5558, ab AS ????#5559]
            +- OneRowRelation

image.png

リソースの削除

%sql
DROP CATALOG `カタログ` CASCADE;

image.png

%sql
DROP SCHEMA `schema_01` CASCADE;

image.png

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?