NUMBER型またはDECIMAL型をテーブルからAvro値にパブリッシングする場合、スキーマはdouble型ではなく文字列として書き出されます。NUMBERおよびDECIMALはより高い精度を使用するため、doubleまたは他の関連するプリミティブ型を使用すると、精度が損なわれる可能性があります。文字列を使用すると、この情報が失われることを防ぐことができます。
NUMBER型またはDECIMAL型を使用する場合、スキーマは次のようになります。
CREATE TABLE avrotest(a INTEGER, b DECIMAL(38,9), c NUMBER(38,9));
INSERT INTO avrotest(1, 12345678901234567890123456789.012345679, 12345678901234567890123456789.012345679);
SELECT data.tojson(), data.getschema() FROM DATASET_PUBLISH ( ON (SELECT * FROM avrotest) ) as L;
*** Query completed. One row found. 2 columns returned. *** Total elapsed time was 1 second. data.TOJSON() [{"a":{"int":1},"b": {"string":"12345678901234567890123456789.012345679"},"c": {"string":"12345678901234567890123456789.012345679"}}] data.GETSCHEMA() {"type":"array","items":{"type":"record","name":"rec_0","fields": [{"name":"a","type":["null","int"]},{"name":"b","type":["null","string"]}, {"name":"c","type":["null","string"]}]}}