日本語

データとスプレッドシート · CSV クリーナー

CSV で空の文字列、NULL、および欠落フィールドが同じものではない理由

· なぜそれが重要なのか

csv json データ形式

空の CSV セル、リテラル NULL トークン、および短い行が、異なる表示入力として到着しますが、文字列出力になります
オリジナル ToolAcre ベクトル イラスト

CSV には「値がありません」と言う方法はありません。テキストしかありません。この投稿では、空のフィールド、引用符で囲まれた空の文字列、リテラル NULL と短い行がどのように異なるのか、ローダーがそれらについて同意しない理由、JSON への変換によってどのように疑問が生じるのかについて説明します。

同じ空白セルが、あるシステムでは NULL になり、別のシステムでは空の文字列になります — それによって結合、カウント、平均が変更される理由

空白に見えるソース セルには複数の履歴が含まれている可能性がありますが、ToolAcre の JSON 出力は意図的に履歴を 1 つの表現に絞り込んでいます。空のフィールド、引用符で囲まれた空のフィールド、およびパーサーによって埋め込まれた短い行はすべて、現在のキーの下では空の文字列になります。外観から null が推測されることはありません。

その一貫性は、消費者がそれを知っている場合にのみ役立ちます。 null 専用のコード テストでは、デフォルトが "" に置き換わることはありません。 CSV 構文または選択された解析モデルが保持していない区別をコンバーターが保持していると想定するのではなく、受信境界で欠損値コントラクトを決定します。

ToolAcre では、消費者が再解釈しない限り、空白セルと埋め込まれた欠落セルは両方とも空の文字列になります。

CSV には、間に何も挟まない 2 つの区切り文字、明示的に引用符で囲まれた空の文字列、NULL または NA などのリテラル テキスト、およびヘッダー幅の前で終わる行を含めることができます。 ToolAcre は最初の 2 つを空の文字列として解析し、リテラル トークンを通常のテキストとしてそのまま残します。

短い行の場合、`RAGGED_ROW` 警告が発行され、存在しない末尾のセルが空の文字列で埋められます。長い行の場合、テーブル内に余分なセルが保持されますが、JSON 変換ではそれらのヘッダー キーが存在しないため、それらは省略されます。この非対称性が、構造上の警告が変換前にアクションを必要とする理由です。

一般的なローダーがそれぞれをどのように解釈するか — スプレッドシート、データベース、データフレーム ライブラリの異なるデフォルト

さまざまなデータベース クライアントと分析ライブラリは、独自の構成可能な null トークンと空フィールド ポリシーを公開します。このリポジトリはこれらのデフォルトを確立できないため、この記事ではすべてのスプレッドシートまたはローダーが同意するとは主張しません。これは、ソースとテストが利用可能な 1 つの実装を文書化しています。

ファイルを別のシステムに渡すときは、そのインポーターの設定を読み取り、``, `""`、NULL、および短い行のフィクスチャを作成します。信頼できる契約は実際の境界で証明されます。 「CSV の通常の意味」に関する一般的な伝承は、欠損値としては弱すぎます。

ローダーのデフォルトは異なります。この記事は、スプレッドシートやデータベースの動作を一般化するのではなく、ToolAcre について説明します。

テキスト NULL は、本物のコンテンツまたは送信者の番兵である可能性があるため、特に危険です。 ToolAcre には設定されたセンチネル リストがないため、4 文字の文字列「NULL」として保存されます。同じことが、NA、N/A, ゼロ、およびプロデューサーが使用する可能性のあるその他のトークンにも当てはまります。

フィールド固有のルールを使用せずに、このような文字列をグローバルに置換しないでください。ノート列には正当に「NULL」を含めることができ、コード列には NA を使用することができます。プロデューサーのドキュメントまたはスキーマを使用して意味を解決し、レビュー中の適切な列のみを変換します。

JSON はユーザーが決定します。ファイルが変換されると、null、空の文字列、およびキーがないことは 3 つの異なるものになります。

JSON は null、空の文字列、および存在しないプロパティを区別しますが、ToolAcre はすべてのヘッダー列に対して文字列値を持つ存在キーを選択します。欠落しているセルまたは埋め込まれたセルは「」になります。コンバーターは、セルが空であるという理由だけで JSON null を生成せず、キーを省略しません。

余剰セルは異なります。対応するヘッダーがない場合、割り当てるキーがないため、生成されるオブジェクトには存在しません。列の警告は、紛失の可能性があることを示します。欠如を意味のある null ポリシーとして読み取るのではなく、ダウンロード前にヘッダーまたは行の幅を修正します。

ToolAcre は、null または存在しないキーではなく、空の文字列と存在するキーを出力します

ヘッダー id、note、code と 4 つのレコード (`1,,A`、`2,"",NULL`、`3,hello`、`4,world,B,extra`) を使用します。最初の 2 つの音符は空の文字列になります。行 2 のコードは「NULL」のままです。行 3 はパディング後にコード "" を受け取りますが、行 4 は余分なセルにキーがないことを警告します。

結果のオブジェクトは、表現された列に対して同じ 3 つのキーを保持していることがわかります。この成功したケースは、解析警告を JSON 形状に結び付けるため、空白セルのスクリーンショットよりも有益です。また、リテラル トークンに別のドメインの決定が必要な理由も示しています。

これでカバーされないもの — 欠損値のデフォルト値に関する代入とビジネス ルール

代入はルートの外にあります。コンバーターは、欠落している価格を埋めたり、以前の値をコピーしたり、隣接する行からデフォルトを推測したりしません。これらの変更はビジネス上の意味に依存し、スキーマが未知の値、適用不可能な値、および意図的に空の値を区別した後に行う必要があります。

また、引用符で囲まれていない空のフィールドと `""` の間の構文上の区別も保持されません。どちらも同じセル文字列に解析されます。その区別が重要である場合、CSV はこのパーサーのテーブル モデルを通じてそれを伝えません。明示的な状態の表現を選択するか、派生データと一緒に生のソースを保存します。

ロードする前に空白の意味を決定します。ToolAcre CSV Cleaner の CSV から JSON への変換によって表示がどのように表示されるか

JSON を型付きコードにロードする前に、空白が何を意味するかを決定してください。 ToolAcre は透明なベースラインを提供します。あらゆる場所の文字列値、欠落している表現セルの空の文字列、変更されていないリテラル監視ワード、および行の形状が使用可能なキーを超える場合の警告です。

これらの警告を検査し、その後の強制を文書化します。コンバーターはテキストのみから欠損値のセマンティクスを作成することはできませんが、コンバーター自身の選択を隠すことは回避できます。この予測可能な動作により、次の境界が実際に強制する資格のあるポリシーを担当するようになります。