9 Replies Latest reply on Nov 8, 2018 6:09 PM by Takao Ozawa

    NULLを含むカラムのデータ型を明示的に数値としたい

    Takao Ozawa

      はじめまして。小澤と申します。

      Tableauを使い始めてもうすぐ1年ですが、大分業務で依存しています。(無いともはやなにも出来ない。。)

      さて質問についてですが、csvを読み込む際、空白が含まれてるとデータの型のデフォルトが「文字列型」になると思います。

      数値として扱いたいので、データソースの画面で明示的に数値(小数)型に変更して、もちろん数値として扱うことができています。

      ただし課題があって、ユニオンによってデータ追加を実施すると、明示的に数値型にしたものがまた文字列となってしまいます。

      やりたいこととしましては、ユニオンなどを実施してもデータの型が変わらないようにしたいということです。

      この後トータル数千万行のデータをユニオンする予定(数回更新実施予定)で、データ更新の処理負荷を少しでも低減したいため、読んだあとの型変更は極力したくなく、明示的に最初に型指定ができればと考えています。

      データの方は、ユニオンするcsvのカラムは統一されております。(空白が存在するカラムはバラバラ)

      以上分かりずらい点があると思いますが、よろしくお願いします。

       

      メッセージ編集者: Takao Ozawa 誤記修正

        • 1. Re: NULLを含むカラムのデータ型を明示的に数値としたい
          Shinichiro Murakami

          あんまりうまい方法ではないですが、

           

          Tableau determines how to map mixed-value columns to data types by the data types of the first 10,000 rows in an Excel data source, and the first 1,024 rows in a CSV data source. For example, if most of the first 10,000 rows are text values, the entire column is mapped to use the text data type.

           

          ということから、ダミーのファイルを準備して、数値のカラムにすべて「0」をインプットして、1024行準備。

          ユニオンをワイルドカードでするのか、個別に追加するのか不明ですが、いずれにしても、

          ダミーファイルのPathが、アルファベットでいちばん最初にくるように命名。

           

          最初は、文字列認識になるかもしれないですが、一旦数値で認識させれば、最初の1024行(すべてダミーファイル)を

          読みに行って、数値が返るのではないかと思うのですが、どうでしょう?試してみてください。

           

           

           

           

          ダミーファイルは、のちほど、フィルタで除く必要があります。

          あー、それと、まだであれば、こちらの投票もお願いします。

          https://community.tableau.com/ideas/4997

           

          Thanks,

          Shin

          • 2. Re: NULLを含むカラムのデータ型を明示的に数値としたい
            Takao Ozawa

            Murakami様

            分かりやすい&丁寧なご回答ありがとうございました。

            型識別のロジック自体も気になっておりましたので、大変参考になります。

            早速実施したところ、結論としては今のところうまくいっておりません。以下の手順で実施しています。

            ・ファイル名でソートの先頭になるようなダミーcsvを作成。各カラムは小数型のものは0.01 整数型のものは0などとする。

            ・ユニオンを作り直して、ダミーcsvをまず指定/抽出実施→この時点で意図通りのデータ型。

            ・実際のデータを全部ユニオン→ここで一部カラムが文字列に変更される。(この時点でまだダミーのフィルタはかけていない)

             →プレビューはソートが若いダミーの内容が表示されている

            といった感じです。

            このあと出来そうな確認を幾つか実施し、またこちらで共有させていただきます。

            • 3. Re: NULLを含むカラムのデータ型を明示的に数値としたい
              Shinichiro Murakami

              実際のデータを全部ユニオン→ここで一部カラムが文字列に変更される。

               

              少数のサンプルですが、↑、ここで、一回目だけ型の変更が必要でした。(2つ以上のファイルをユニオン後、型指定)

              その後は型をキープできました。

               

               

              Shin

               

              • 4. Re: NULLを含むカラムのデータ型を明示的に数値としたい
                Shinichiro Murakami

                そもそも論ですが、

                大量データの際の計算負荷がどれほどかは分かりませんが、デフォルトプロパティでタイプのフォーマットを設定したら、形式は固定できますが、

                そんなにパフォーマンスが落ちるもんなんでしょうかね?

                 

                 

                 

                Shin

                • 5. Re: NULLを含むカラムのデータ型を明示的に数値としたい
                  LM Seven

                  LM-7です。

                   

                  デフォルトプロパティで設定してもパフォーマンスに変化はないように思いますが、

                  読み込んだときにあるファイルは文字列であるファイルは数値で認識されユニオンできなければ面倒ですね。

                  全部文字列なら気にする必要はないかと思いますが。

                   

                  DesktopじゃなくてPrep使うのはだめなんでしょうか?

                  Prepはサンプリングされるので何千万行あろうが操作上は関係ありません。

                  型変換してユニオンして出力するだけです。

                  Prepは2018.2よりコマンドラインをサポートしたので、一度フローを作れば後は自動化できます。

                  いや、でもデータソース編集画面でサンプリングするのはDesktopも同じだからコレは意味がない?

                  複数ファイル指定で読み込んで、ついでに最初のフィールドのタイプを変更すれば大丈夫ですかね。いや、これもDesktopでできるかな……

                  • 6. Re: NULLを含むカラムのデータ型を明示的に数値としたい
                    Takao Ozawa

                    shin様

                    コメントありがとうございます。

                     

                    >デフォルトプロパティでタイプのフォーマットを設定したら、形式は固定できますが、

                    すみません、勉強不足で上記が今一つ理解できていません。どの手順のことをおっしゃっているのでしょうか?

                     

                    現状の私の手順ですと、

                    1.ユニオン実施

                    2.テキスト認識しているカラムを数値に変換

                    3.抽出(ここが時間かかる)

                    とやれば、確かに処理時間的にはほぼ変わりませんが、以下の手順だとやはり処理時間が増えてしまうのを懸念しています。

                    1.ユニオン実施

                    2.抽出(ここが時間かかる)

                    3.データ型が意図通りではないことに気づいてテキスト認識しているカラムを数値に変換

                    4.再度抽出(2ほどではないが、時間かかる)

                     

                    shim様に最初に教えていただいたcsvの場合先頭1024行で型を評価するという説明も私の意図と違いそう(おそらくshin様の意図とも)なのも気になるところです。(ユニオンの場合だけ?)

                    これまでも小数型であってほしいパラメータが整数型となっている、などもありましたので今後のためにもここは明確になってほしいです。

                    • 8. Re: NULLを含むカラムのデータ型を明示的に数値としたい
                      Takao Ozawa

                      LM-7様

                      コメントありがとうございます。

                      Prepはまだ実用で使ったことがなく(ちょっと触った程度)選択肢に入っていませんでした。

                      基本的な前処理は別のソフトで実施しており、Prepが得意そうな処理のニーズがあまりないのと特に定常的な処理ではない(今回限り実施)なためDesktopだけで実施したいというのが希望とするところです。(型の調整以外は特に懸案がありませんし。。)

                      • 9. Re: NULLを含むカラムのデータ型を明示的に数値としたい
                        Takao Ozawa

                        shin様

                        ありがとうございます。これで良さそうです。

                        データソース画面での型変更だと抽出しなおしが発生して時間がかかってると思いますが、こちらだと秒殺ですね。

                        結果、データソースでの変更と同じになるようですし。

                        抽出後に型を直したい場合、こちらを使用するという感じでいけそうです。

                        正解マーククリックいたしました。また何かありましたらよろしくお願いします。