स्कीमा-कम JSON से अपाचे बीम "रो" प्रकार?
क्या जावा एसडीके का उपयोग करके अपाचे बीम "रो" प्रकारों में मनमाने स्कीमा-कम JSON तार को परिवर्तित करने का एक तरीका है ? यदि नहीं, तो क्या किसी मौजूदा योजना से बीम स्कीमा प्रकार प्राप्त करना संभव है?
मैंने JsonToRow और ParseJsons के लिए प्रलेखन पाया है , लेकिन उन्हें काम करने के लिए एक स्कीमा या POJO वर्ग की आवश्यकता होती है। मैंने यह भी पाया कि आप JSON स्ट्रिंग्स को एक BigQuery TableRow में पढ़ सकते हैं, लेकिन TableRow को रो में परिवर्तित करने का कोई तरीका प्रतीत नहीं होता है जिसमें पहले से ही एक स्कीमा शामिल नहीं है।
जवाब
नहीं, यह रो (और इसका उपयोग करने वाले चौखटे) के रूप में संभव नहीं है, निर्माण के समय स्कीमा को जानना आवश्यक है। विकल्प पर, निर्माण समय पर, अपने स्कीमा का अनुमान लगाने के लिए अपने डेटा का एक छोटा सा हिस्सा पढ़ने के लिए, और अपने JsonToRow परिवर्तन को लागू करने के लिए इसका उपयोग करें।
दुर्भाग्य से, सामान्य उत्तर "नहीं" प्रतीत होता है, हालांकि कुछ विशिष्ट परिस्थितियां हैं जहां उत्तर "हां" हो सकता है।
मुद्दा यह है कि स्कीमा JSON डेटा प्रकारों के साथ 100% संगत नहीं हैं, विशेष रूप से ARRAY फ़ील्ड प्रकार के कारण।
JSON में, किसी सूची के तत्वों में अलग-अलग डेटा प्रकार हो सकते हैं, लेकिन बीम में स्कीमा को प्रत्येक तत्व को उसी प्रकार का होना चाहिए । यह प्रकार एक और ROW, या एक तार्किक प्रकार भी हो सकता है , लेकिन सभी तत्व समान होने चाहिए।
दुर्भाग्य से, ARRAY को बदलने के लिए ROW का उपयोग पूरी तरह से काम नहीं करता है। यद्यपि ROW फ़ील्ड स्थितीय हैं, उनका नाम भी है, जो उन्हें MAP के करीब बनाते हैं। इसके अलावा, यदि आपके डेटासेट में JSON की अलग-अलग लंबाई की सूची है, तो आप प्रत्येक रो के साथ एक अलग स्कीमा रखेंगे, जिसके अवांछनीय परिणाम होंगे।
इसलिए यदि आपका JSON डेटा मनमाने प्रकार की सूचियों का उपयोग नहीं करता है, तो आपको ठीक होना चाहिए। उस ने कहा, बीम JSON से स्कीमा प्राप्त करने के लिए कोई उपयोगिताओं प्रदान नहीं करता है, इसलिए आपको स्वयं उस समाधान को बनाने की आवश्यकता होगी।
मैं काम पर इस सटीक स्थिति में चल रहा हूं, और मैंने आपके द्वारा सीमित JSON प्रसंस्करण विकल्पों के बारे में कहा गया दूसरा सब कुछ। यह पता चला है कि बीम कुछ ऐसा प्रदान करता है जो एक BigQuery TableRow / TableSchema को बीम रो / स्कीमा में बदल सकता है । यदि आप इसे अपने स्कीमा के रूप में चुनते हैं और JsonToRow के साथ आगे बढ़ते हैं, तो आपको BigQueryUtils.fromTableSchema (BYTES, DATETIME, BigQueryUtils द्वारा उत्पन्न तार्किक प्रकार ) द्वारा उत्पादित JSON और बीम डेटा प्रकारों के बीच डेटा प्रकार प्रतिबाधा बेमेल को पुल करने की आवश्यकता होगी ।