> ## Documentation Index
> Fetch the complete documentation index at: https://www.integrate.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# ETL: Xplenty入門 Part10: データ型の変換

> Integrate.io ETLの式エディタでChararray、Long、Double、DateTimeなどへデータ型を変換する方法と、BAG型やMAP型を扱う際の注意点を実例とともに解説します。

Xplentyでは**式エディタ**を使用することでデータ型を変換することが可能です。しかし、型の変換方法は変換する型によって変わるため、以下を参考に活用ください。

<Frame>
  <img src="https://mintcdn.com/integrateio/u3KZjgbItgbZsh3u/images/japanese-knowledge-base/novice-part10-jp/image-1.webp?fit=max&auto=format&n=u3KZjgbItgbZsh3u&q=85&s=d8afbcde8d3cee1db9818c6620dce80a" alt="novice-part10-jp image 1" width="756" height="696" data-path="images/japanese-knowledge-base/novice-part10-jp/image-1.webp" />
</Frame>

**シンプルな型変換1**

## **1. Chararray(String)**

用途：BAG型やMAP型および数値型などから文字列型への変換に使用する

式エディタでの使用例：
**(chararray)** field名

**例外ケース：変数画面でHexstring（16進文字列）を文字列型に変換するには？**

XplentyではSalesforceのオブジェクトにあるID列(AccountIdやOwnerId)でも使用される「0052x0000034oJqAAI」のような値を文字列として**変数画面で使用した場合**、Hexstring（16進文字列）として自動的に扱われます。こうした場合、Chararray関数を使用して文字列型へ変換しようとするとエラーとなってしまいます。

そこでHexstring（16進文字列）の値を文字列型で定義し、パイプラインの条件やSelectコンポーネントで使用したい場合、バックスラッシュ「'\[Hexstring文字列]'」のように定義することで、文字列に変換が可能です。

例）文字列「0052x0000034oJqAAI」を変数で文字列型として定義する場合

```
'\'0052x0000034oJqAAI\''
```

<Frame>
  <img src="https://mintcdn.com/integrateio/u3KZjgbItgbZsh3u/images/japanese-knowledge-base/novice-part10-jp/image-2.webp?fit=max&auto=format&n=u3KZjgbItgbZsh3u&q=85&s=7680897b004a4f89b87678917edbd43f" alt="novice-part10-jp image 2" width="987" height="388" data-path="images/japanese-knowledge-base/novice-part10-jp/image-2.webp" />
</Frame>

## **2. Int型**

文字列型の数値データを数値型に変換

式エディタでの使用例：
**(int)** field名

## **3. Long型**

文字列型の数値データを数値型に変換

式エディタでの使用例：
**(long)** field名

## **4. Float型**

文字列型の数値データを数値型に変換

式エディタでの使用例：
**(float)** field名

## **5. Double型**

文字列型の数値データを数値型に変換

式エディタでの使用例：
**(double)** field名

## **6. 数値へ変換、数値に変換出来なかった場合はデフォルト値をセット**

ParseIntOrDefault(field名,数値に変換出来なかった場合のデフォルト数値（Int型）)
ParseLongOrDefault(field名,数値に変換出来なかった場合のデフォルト数値（Long型）)
ParseFloatOrDefault(field名,数値に変換出来なかった場合のデフォルト数値（Float型）)
ParseDoubleOrDefault(field名,数値に変換出来なかった場合のデフォルト数値（Double型）)

式エディタでの使用例：

ParseIntOrDefault('ああああ',1)
1（Int型）を返す >文字列が数値に変換できなかったため

ParseIntOrDefault('300',1)
300（Int型）を返す

**シンプルな型変換2**

## **1. Map型**

JSONなどのキーバリュー形式のデータを格納したデータ形式です。
以下のようなデータを取り込む際に使用されます

area : **\{
id : "130" ,
name : "東京"
}**

式エディタでの使用例：
**TOMAP**('id','130','name','東京')

結果：
\{name=東京, id=130}

**MAP型からデータを取得するには?**

Field1#'キー名称'と指定すれば、キーに対応する値が取得できます。

式エディタでの使用例：
**TOMAP**('id','130','name','東京')#'id'

結果：
130

## **2. Tuple型**

複数フィールドが配列になっている形式のデータ型です。

式エディタでの使用例：
**TOTUPLE**('001,TV,Electronics')

結果：
(001,TV,Electronics)

## **3. Bag型**

式エディタでの使用例：
**TOBAG**('001','TV','Electronics')

結果：
\{(001),(TV),(Electronics)}

**その他の型変換**

## **1. BagToString**

Bag型からString型に変換

式エディタの使用例：\*この例では、文字列をBag型に便宜的に変換するためにJsonStringToBagを使用

BagToString(JsonStringToBag('\[1,2,3]'),';')

結果：String型
1;2;3

## **2. BagToTuple**

Bag型からTuple型に変換

式エディタの使用例：
BagToTuple(JsonStringToBag('\[1,2,3]'))

結果：Tuple型
(1,2,3)

**Tuple型の配列の一部の値を取得するには?**

式エディタの使用例：
BagToTuple(JsonStringToBag('\[1,2,3]')).\$0

結果：
1

## **3. MapToBug**

Map型からBug型に変換

式エディタの使用例：
MapToBag(TOMAP('a',1,'b',2,'c',3))

結果：Bag型
\{(\[value#1,key#a]),(\[value#2,key#b]),(\[value#3,key#c])}

**参考：Xplentyで扱えるデータ型について**

使用できる型は[こちら](https://www.xplenty.com/docs/using-expressions-in-xplenty/)

\*2020年8月16日現在、XplentyではDate型がありません。

<Frame>
  <img src="https://mintcdn.com/integrateio/u3KZjgbItgbZsh3u/images/japanese-knowledge-base/novice-part10-jp/image-3.webp?fit=max&auto=format&n=u3KZjgbItgbZsh3u&q=85&s=06135f7e6bb8a1d890eb253a324784dd" alt="novice-part10-jp image 3" width="1274" height="1258" data-path="images/japanese-knowledge-base/novice-part10-jp/image-3.webp" />
</Frame>

**より実践的なデータ処理**

## **1. BAG型のフィールド**

Flatten関数を使用する。

式）Flatten(`BAG型のフィールド`）

バッグ型のフィールドがもつデータ数にもとづきレコードが分かれます。
例えば以下のようなデータをもつBAG型のフィールドの場合、1レコードが2つのレコードに分かれます。

`&#123; [&#123;"id":"001","price":"200"&#125;], [&#123;"id":"002","price":"500"&#125;] &#125;`

**結果:**
\{"id":"001","price":"200"}
\{"id":"002","price":"500"}

## **2. BAG形式の文字列を持つフィールドの処理**

すでに処理対象のフィールドのデータ型がBAG型の場合はこの処理は不要ですが、String型の場合には以下の処理が必要となります。

フィールド「test」の値：
`[&#123;"id":"001","price":"200"&#125;]`

String型のJSON文字列をBAG型へ変換

「test2」フィールド：
式）**JsonStringToBag**(test)

結果値：`&#123;(&#123;"id":"001","price":"200"&#125;)&#125;`

これでフィールドをFlatten関数で処理することで、以下の様なJSON文字列になります。

「test3」フィールド：
式）**Flatten**(test2)

`&#123;"id":"001","price":"200"&#125;`

あとは**JsonStringToMap**関数を使って、testフィールドの値の各キーを取得できます。

JsonStringToMap(test3)#'id' --> 001
JsonStringToMap(test3)#'price' --> 200
