paint-brush
ពិនិត្យ QA សម្រាប់សំណុំទិន្នន័យធំជាមួយនឹងវិធីសាស្រ្ត Deequ និងស្ថិតិដោយ@akshayjain1986
42,062 ការអាន
42,062 ការអាន

ពិនិត្យ QA សម្រាប់សំណុំទិន្នន័យធំជាមួយនឹងវិធីសាស្រ្ត Deequ និងស្ថិតិ

ដោយ Akshay Jain
Akshay Jain HackerNoon profile picture

Akshay Jain

@akshayjain1986

Data Engineering Manager at Innovate UK

7 នាទី read2024/05/30
Read on Terminal Reader
Read this story in a terminal
Print this story
Read this story w/o Javascript
Read this story w/o Javascript
tldt arrow
km-flagKM
អានរឿងនេះជាភាសាខ្មែរ!
en-flagEN
Read this story in the original language, English!
ln-flagLN
Tanga lisolo oyo na lingala!
lo-flagLO
ອ່ານເລື່ອງນີ້ເປັນພາສາລາວ!
ps-flagPS
دا کیسه په پښتو ژبه ولولئ!
lt-flagLT
Skaitykite šią istoriją lietuvių kalba!
hr-flagHR
Pročitajte ovu priču na hrvatskom!
lv-flagLV
Izlasi šo stāstu latviešu valodā!
ht-flagHT
Li istwa sa a an kreyòl ayisyen!
hu-flagHU
Olvasd el ezt a történetet magyarul!
hy-flagHY
Կարդացեք այս պատմությունը հայերեն։
uk-flagUK
Читайте цю історію українською!
mg-flagMG
Vakio amin'ny teny malagasy ity tantara ity!
More
KM

យូរ​ពេក; អាន

បណ្ណាល័យ Deequ គឺជាទម្រង់ទិន្នន័យប្រភពបើកចំហ និងក្របខ័ណ្ឌ QA ដែលបង្កើតឡើងនៅលើ Spark ។ វាអនុញ្ញាតឱ្យអ្នកកំណត់ច្បាប់សុពលភាពដ៏ស្មុគស្មាញស្របតាមតម្រូវការជាក់លាក់របស់អ្នក ដោយធានាបាននូវការគ្របដណ្តប់យ៉ាងទូលំទូលាយ។ Deequ មានលក្ខណៈពិសេសម៉ាទ្រីសទូលំទូលាយ និងសមត្ថភាពរកឃើញភាពមិនប្រក្រតី ដែលនឹងជួយអ្នកក្នុងការកំណត់អត្តសញ្ញាណ និងដោះស្រាយបញ្ហាគុណភាពទិន្នន័យយ៉ាងសកម្ម។ នេះជារបៀបដែលអ្នកអាចអនុវត្តការត្រួតពិនិត្យទាំងនេះដោយប្រើ Deequ ។

Companies Mentioned

Mention Thumbnail
Array
Mention Thumbnail
scale
featured image - ពិនិត្យ QA សម្រាប់សំណុំទិន្នន័យធំជាមួយនឹងវិធីសាស្រ្ត Deequ និងស្ថិតិ
Akshay Jain HackerNoon profile picture
Akshay Jain

Akshay Jain

@akshayjain1986

Data Engineering Manager at Innovate UK

ជំនាញសំខាន់មួយនៃជំនាញទិន្នន័យដែលសម្រេចបានគឺការគ្រប់គ្រងប្រកបដោយប្រសិទ្ធភាពនៃសំណុំទិន្នន័យធំ ដោយធានាបាននូវគុណភាពទិន្នន័យ និងភាពជឿជាក់។ ទិន្នន័យគឺជាផ្នែកកណ្តាល និងជាមូលដ្ឋាននៃប្រព័ន្ធទិន្នន័យណាមួយ ហើយអ្វីក៏ដោយដែលអ្នកមានជំនាញល្អនៅក្នុងទិដ្ឋភាពផ្សេងទៀតនៃពាណិជ្ជកម្មរបស់យើង នេះគឺជាអ្វីដែលអ្នកមិនអាចមើលរំលងបាន។


នៅក្នុងអត្ថបទនេះ ខ្ញុំស្វែងយល់ពីបច្ចេកទេសដ៏រឹងមាំសម្រាប់អនុវត្តការត្រួតពិនិត្យ QA លើសំណុំទិន្នន័យធំដោយប្រើបណ្ណាល័យ Deequ និងវិធីសាស្ត្រស្ថិតិ។ តាមរយៈការរួមបញ្ចូលវិធីសាស្រ្តដែលខ្ញុំបានពន្យល់ខាងក្រោម អ្នកនឹងអាចរក្សាបាននូវភាពត្រឹមត្រូវនៃទិន្នន័យ ពង្រឹងការអនុវត្តការគ្រប់គ្រងទិន្នន័យរបស់អ្នក និងការពារបញ្ហាដែលអាចកើតមាននៅក្នុងកម្មវិធីខាងក្រោម។

ពិនិត្យ QA ដោយប្រើបណ្ណាល័យ Deequ

ហេតុអ្វី Deequ?

ការធានាគុណភាពទិន្នន័យតាមមាត្រដ្ឋានគឺជាកិច្ចការដ៏គួរឱ្យភ័យខ្លាច ជាពិសេសនៅពេលដោះស្រាយជាមួយជួររាប់ពាន់ជួរដែលរក្សាទុកក្នុងប្រព័ន្ធឯកសារចែកចាយ ឬឃ្លាំងទិន្នន័យ។ បណ្ណាល័យ Deequ គឺជាទម្រង់ទិន្នន័យប្រភពបើកចំហ និងក្របខ័ណ្ឌ QA ដែលបង្កើតឡើងនៅលើ Spark ដែលជាឧបករណ៍ទំនើប និងអាចប្រើប្រាស់បានដែលត្រូវបានរចនាឡើងដើម្បីដោះស្រាយបញ្ហានេះ។ អ្វីដែលកំណត់វាក្រៅពីឧបករណ៍ស្រដៀងគ្នាគឺសមត្ថភាពរបស់វាក្នុងការរួមបញ្ចូលយ៉ាងរលូនជាមួយ Spark ដោយប្រើប្រាស់ថាមពលដំណើរការចែកចាយសម្រាប់ការគ្រប់គ្រងប្រកបដោយប្រសិទ្ធភាពនៃសំណុំទិន្នន័យខ្នាតធំ។


នៅពេលអ្នកសាកល្បងវា អ្នកនឹងឃើញពីរបៀបដែលភាពបត់បែនរបស់វាអនុញ្ញាតឱ្យអ្នកកំណត់ច្បាប់សុពលភាពដ៏ស្មុគស្មាញដែលតម្រូវតាមតម្រូវការជាក់លាក់របស់អ្នក ដោយធានាបាននូវការគ្របដណ្តប់យ៉ាងទូលំទូលាយ។ លើសពីនេះ Deequ មានលក្ខណៈពិសេសម៉ាទ្រីសទូលំទូលាយ និងសមត្ថភាពរកឃើញភាពមិនប្រក្រតី ដែលនឹងជួយអ្នកក្នុងការកំណត់អត្តសញ្ញាណ និងដោះស្រាយបញ្ហាគុណភាពទិន្នន័យយ៉ាងសកម្ម។ សម្រាប់អ្នកជំនាញផ្នែកទិន្នន័យដែលធ្វើការជាមួយសំណុំទិន្នន័យធំ និងថាមវន្ត Deequ គឺជាដំណោះស្រាយកាំបិតស្វីស។ សូមមើលពីរបៀបដែលយើងអាចប្រើវាបាន។

ការដំឡើង Deequ

ព័ត៌មានលម្អិតបន្ថែមអំពីការដំឡើងបណ្ណាល័យ Deequ និងករណីប្រើប្រាស់ជុំវិញការធ្វើទម្រង់ទិន្នន័យគឺអាចចូលប្រើបាន នៅទីនេះ ។ សម្រាប់ជាប្រយោជន៍នៃភាពសាមញ្ញ ក្នុងឧទាហរណ៍នេះ យើងទើបតែបង្កើតកំណត់ត្រារបស់ក្មេងលេងមួយចំនួន៖


 val rdd = spark.sparkContext.parallelize(Seq( Item(1, "Thingy A", "awesome thing.", "high", 0), Item(2, "Thingy B", "available at http://thingb.com", null, 0), Item(3, null, null, "low", 5), Item(4, "Thingy D", "checkout https://thingd.ca", "low", 10), Item(5, "Thingy E", null, "high", 12))) val data = spark.createDataFrame(rdd)


ការកំណត់ការសន្មត់ទិន្នន័យ

កម្មវិធីទិន្នន័យភាគច្រើនមកជាមួយការសន្មត់ដោយប្រយោលអំពីគុណលក្ខណៈទិន្នន័យ ដូចជាតម្លៃដែលមិនមែនជា NULL និងភាពប្លែក។ ជាមួយនឹង Deequ ការសន្មត់ទាំងនេះក្លាយជាច្បាស់លាស់តាមរយៈការធ្វើតេស្តឯកតា។ នេះគឺជាការត្រួតពិនិត្យទូទៅមួយចំនួន៖


  1. ចំនួនជួរដេក៖ ត្រូវប្រាកដថាសំណុំទិន្នន័យមានចំនួនជួរដេកជាក់លាក់។


  2. ភាពពេញលេញនៃគុណលក្ខណៈ៖ ពិនិត្យមើលថាគុណលក្ខណៈដូចជា id និងឈ្មោះផលិតផលមិន NULL ទេ។


  3. ភាពប្លែកនៃគុណលក្ខណៈ៖ ត្រូវប្រាកដថាលក្ខណៈជាក់លាក់ ដូចជាលេខសម្គាល់មានលក្ខណៈប្លែកពីគេ។


  4. ជួរតម្លៃ៖ ធ្វើឱ្យមានសុពលភាពថាគុណលក្ខណៈដូចជាអាទិភាព និង numViews ធ្លាក់ក្នុងជួរដែលរំពឹងទុក។


  5. ការផ្គូផ្គងលំនាំ៖ ផ្ទៀងផ្ទាត់ថាការពិពណ៌នាមាន URLs នៅពេលរំពឹងទុក។


  6. លក្ខណៈសម្បត្តិស្ថិតិ៖ ធានាថាមធ្យមនៃគុណលក្ខណៈលេខត្រូវនឹងលក្ខណៈវិនិច្ឆ័យជាក់លាក់។


នេះជារបៀបដែលអ្នកអាចអនុវត្តការត្រួតពិនិត្យទាំងនេះដោយប្រើ Deequ:


 import com.amazon.deequ.VerificationSuite import com.amazon.deequ.checks.{Check, CheckLevel, CheckStatus} val verificationResult = VerificationSuite() .onData(data) .addCheck( Check(CheckLevel.Error, "unit testing my data") .hasSize(_ == 5) // we expect 5 rows .isComplete("id") // should never be NULL .isUnique("id") // should not contain duplicates .isComplete("productName") // should never be NULL // should only contain the values "high" and "low" .isContainedIn("priority", Array("high", "low")) .isNonNegative("numViews") // should not contain negative values // at least half of the descriptions should contain a url .containsURL("description", _ >= 0.5) // half of the items should have less than 10 views .hasApproxQuantile("numViews", 0.5, _ <= 10)) .run()


ការបកស្រាយលទ្ធផល

បន្ទាប់ពីដំណើរការការត្រួតពិនិត្យទាំងនេះ Deequ បកប្រែវាទៅជាស៊េរីនៃការងារ Spark ដែលវាដំណើរការដើម្បីគណនាម៉ែត្រនៅលើទិន្នន័យ។ បន្ទាប់ពីនោះ វាហៅមុខងារអះអាងរបស់អ្នក (ឧ. _ == 5 សម្រាប់ការត្រួតពិនិត្យទំហំ) នៅលើម៉ែត្រទាំងនេះ ដើម្បីមើលថាតើការរឹតត្បិតលើទិន្នន័យឬអត់។ យើងអាចពិនិត្យមើលវត្ថុ "លទ្ធផលផ្ទៀងផ្ទាត់" ដើម្បីមើលថាតើការធ្វើតេស្តរកឃើញកំហុសដែរឬទេ៖


 import com.amazon.deequ.constraints.ConstraintStatus if (verificationResult.status == CheckStatus.Success) { println("The data passed the test, everything is fine!") } else { println("We found errors in the data:\n") val resultsForAllConstraints = verificationResult.checkResults .flatMap { case (_, checkResult) => checkResult.constraintResults } resultsForAllConstraints .filter { _.status != ConstraintStatus.Success } .foreach { result => println(s"${result.constraint}: ${result.message.get}") } }


ប្រសិនបើយើងដំណើរការឧទាហរណ៍ យើងទទួលបានលទ្ធផលដូចខាងក្រោម៖


 We found errors in the data: CompletenessConstraint(Completeness(productName)): Value: 0.8 does not meet the requirement! PatternConstraint(containsURL(description)): Value: 0.4 does not meet the requirement!


ការធ្វើតេស្តបានរកឃើញថាការសន្មត់របស់យើងត្រូវបានរំលោភ! មានតែ 4 ក្នុងចំណោម 5 (80%) នៃតម្លៃនៃគុណលក្ខណៈឈ្មោះផលិតផលគឺមិនមែនជាមោឃៈ ហើយមានតែ 2 ក្នុងចំណោម 5 (ពោលគឺ 40%) នៃគុណលក្ខណៈពិពណ៌នាដែលមាន URL ។ ជាសំណាងល្អ យើងបានដំណើរការការសាកល្បង ហើយបានរកឃើញកំហុស។ នរណាម្នាក់គួរតែជួសជុលទិន្នន័យភ្លាមៗ!

ការត្រួតពិនិត្យ QA ជាមួយនឹងវិធីសាស្ត្រស្ថិតិ

ខណៈពេលដែល Deequ ផ្តល់នូវក្របខ័ណ្ឌដ៏រឹងមាំមួយសម្រាប់សុពលភាពទិន្នន័យ ការរួមបញ្ចូលវិធីសាស្រ្តស្ថិតិអាចបង្កើនការត្រួតពិនិត្យ QA របស់អ្នកបន្ថែមទៀត ជាពិសេសប្រសិនបើអ្នកកំពុងដោះស្រាយជាមួយនឹងម៉ែត្រសរុបនៃសំណុំទិន្នន័យ។ តោះមើលពីរបៀបដែលអ្នកអាចប្រើប្រាស់វិធីសាស្រ្តស្ថិតិដើម្បីតាមដាន និងធានាគុណភាពទិន្នន័យ។

ការតាមដានចំនួនកំណត់ត្រា

ពិចារណាលើសេណារីយ៉ូអាជីវកម្មដែលដំណើរការ ETL (Extract, Transform, Load) បង្កើតកំណត់ត្រា N នៅលើការងារដែលបានកំណត់ពេលប្រចាំថ្ងៃ។ ក្រុមគាំទ្រប្រហែលជាចង់រៀបចំការត្រួតពិនិត្យ QA ដើម្បីបង្កើនការដាស់តឿន ប្រសិនបើមានគម្លាតគួរឱ្យកត់សម្គាល់នៅក្នុងចំនួនកំណត់ត្រា។ ជាឧទាហរណ៍ ប្រសិនបើដំណើរការនេះជាធម្មតាបង្កើតកំណត់ត្រាចន្លោះពី 9,500 ទៅ 10,500 ជារៀងរាល់ថ្ងៃក្នុងរយៈពេលពីរខែ ការកើនឡើង ឬថយចុះគួរឱ្យកត់សម្គាល់ណាមួយអាចបង្ហាញពីបញ្ហាជាមួយនឹងទិន្នន័យមូលដ្ឋាន។


យើង​អាច​ប្រើ​វិធី​ស្ថិតិ​ដើម្បី​កំណត់​កម្រិត​នេះ​លើ​ដំណើរការ​មួយ​ណា​ដែល​គួរ​បង្កើន​ការ​ជូន​ដំណឹង​ដល់​ក្រុម​គាំទ្រ។ ខាង​ក្រោម​នេះ​គឺ​ជា​ការ​បង្ហាញ​ពី​ការ​តាមដាន​ចំនួន​កំណត់​ក្នុង​រយៈ​ពេល​ពីរ​ខែ៖


image










ដើម្បីវិភាគនេះ យើងអាចបំប្លែងទិន្នន័យរាប់កំណត់ត្រា ដើម្បីសង្កេតមើលការផ្លាស់ប្តូរពីមួយថ្ងៃទៅមួយថ្ងៃ។ ការផ្លាស់ប្តូរទាំងនេះជាទូទៅវិលជុំវិញសូន្យ ដូចដែលបានបង្ហាញក្នុងតារាងខាងក្រោម៖


image











នៅពេលដែលយើងតំណាងឱ្យអត្រានៃការផ្លាស់ប្តូរនេះជាមួយនឹងការចែកចាយធម្មតា វាបង្កើតជាខ្សែកោងកណ្ដឹង ដែលបង្ហាញថាទិន្នន័យត្រូវបានចែកចាយជាធម្មតា។ ការផ្លាស់ប្តូរដែលរំពឹងទុកគឺប្រហែល 0% ជាមួយនឹងគម្លាតស្តង់ដារ 2.63% ។


image












ការវិភាគនេះបង្ហាញថាការរាប់កំណត់ត្រាជាធម្មតាធ្លាក់ក្នុងចន្លោះពី -5.26% ទៅ +5.25% ជាមួយនឹងទំនុកចិត្ត 90%។ ដោយផ្អែកលើចំណុចនេះ អ្នកអាចបង្កើតច្បាប់មួយដើម្បីបង្កើនការដាស់តឿន ប្រសិនបើចំនួនកំណត់ត្រានេះខុសពីជួរនេះ ដោយធានាបាននូវអន្តរាគមន៍ទាន់ពេលវេលា។

ការតាមដានការគ្របដណ្តប់គុណលក្ខណៈ

Attribute coverag e សំដៅទៅលើសមាមាត្រនៃតម្លៃដែលមិនមែនជា NULL ទៅនឹងចំនួនកំណត់ត្រាសរុបសម្រាប់រូបថតសំណុំទិន្នន័យ។ ឧទាហរណ៍ ប្រសិនបើកំណត់ត្រា 8 ក្នុងចំណោម 100 មានតម្លៃ NULL សម្រាប់គុណលក្ខណៈជាក់លាក់មួយ ការគ្របដណ្តប់សម្រាប់គុណលក្ខណៈនោះគឺ 92% ។


សូមពិនិត្យមើលករណីអាជីវកម្មមួយផ្សេងទៀតជាមួយនឹងដំណើរការ ETL ដែលបង្កើតរូបថតតារាងផលិតផលប្រចាំថ្ងៃ។ យើងចង់តាមដានការគ្របដណ្តប់នៃគុណលក្ខណៈពិពណ៌នាផលិតផល។ ប្រសិនបើការរ៉ាប់រងធ្លាក់ក្រោមកម្រិតជាក់លាក់មួយ ការជូនដំណឹងគួរតែត្រូវបានលើកឡើងសម្រាប់ក្រុមគាំទ្រ។ ខាង​ក្រោម​នេះ​គឺ​ជា​តំណាង​ដែល​មើល​ឃើញ​នៃ​ការ​គ្រប​ដណ្តប់​គុណ​លក្ខណៈ​សម្រាប់​ការ​ពិពណ៌នា​ផលិតផល​ក្នុង​រយៈ​ពេល​ពីរ​ខែ៖


image








តាមរយៈការវិភាគភាពខុសប្លែកគ្នាពីមួយថ្ងៃទៅមួយថ្ងៃពិតប្រាកដនៅក្នុងការគ្របដណ្តប់ យើងសង្កេតឃើញថាការផ្លាស់ប្តូរមានលំនឹងជុំវិញសូន្យ៖


image









ការតំណាងឱ្យទិន្នន័យនេះជាការចែកចាយធម្មតាបង្ហាញថាវាត្រូវបានចែកចាយជាធម្មតាជាមួយនឹងការផ្លាស់ប្តូរដែលរំពឹងទុកប្រហែល 0% និងគម្លាតស្តង់ដារនៃ 2.45% ។


image














ដូចដែលយើងឃើញហើយ សម្រាប់សំណុំទិន្នន័យនេះ ការគ្របដណ្តប់លើគុណលក្ខណៈការពិពណ៌នាផលិតផលជាធម្មតាមានចាប់ពី -4.9% ទៅ +4.9% ជាមួយនឹងទំនុកចិត្ត 90%។ ដោយផ្អែកលើសូចនាករនេះ យើងអាចកំណត់ច្បាប់មួយដើម្បីលើកការជូនដំណឹង ប្រសិនបើការគ្របដណ្តប់គម្លាតលើសពីជួរនេះ។

QA ពិនិត្យជាមួយក្បួនដោះស្រាយស៊េរីពេលវេលា

ប្រសិនបើអ្នកធ្វើការជាមួយសំណុំទិន្នន័យដែលបង្ហាញពីការប្រែប្រួលសំខាន់ៗដោយសារកត្តាដូចជា រដូវកាល ឬនិន្នាការ វិធីសាស្ត្រស្ថិតិបែបប្រពៃណីអាចបង្កឱ្យមានការជូនដំណឹងមិនពិត។ ក្បួនដោះស្រាយស៊េរីពេលវេលាផ្តល់នូវវិធីសាស្រ្តចម្រាញ់បន្ថែមទៀត ធ្វើអោយប្រសើរឡើងនូវភាពត្រឹមត្រូវ និងភាពជឿជាក់នៃការត្រួតពិនិត្យ QA របស់អ្នក។


ដើម្បី​បង្កើត​ការ​ជូន​ដំណឹង​ដែល​យល់​បាន​កាន់​តែ​ច្រើន អ្នក​អាច​ប្រើ​ទាំង Autoregressive Integrated Moving Average (ARIMA) វិធីសាស្រ្ត Holt-Winters . អតីតគឺល្អគ្រប់គ្រាន់សម្រាប់សំណុំទិន្នន័យដែលមាននិន្នាការ ប៉ុន្តែក្រោយមកទៀតអនុញ្ញាតឱ្យយើងដោះស្រាយជាមួយសំណុំទិន្នន័យទាំងនិន្នាការ និងរដូវកាល។ វិធីសាស្រ្តនេះប្រើសមាសធាតុសម្រាប់កម្រិត និន្នាការ និងរដូវកាល ដែលអនុញ្ញាតឱ្យវាសម្របខ្លួនតាមការផ្លាស់ប្តូរតាមពេលវេលា។


តោះមើលគំរូការលក់ប្រចាំថ្ងៃដែលបង្ហាញទាំងនិន្នាការ និងគំរូតាមរដូវកាលដោយប្រើ Holt-Winters៖

 import pandas as pd from statsmodels.tsa.holtwinters import ExponentialSmoothing # Load and preprocess the dataset data = pd.read_csv('sales_data.csv', index_col='date', parse_dates=True) data = data.asfreq('D').fillna(method='ffill') # Fit the Holt-Winters model model = ExponentialSmoothing(data, trend='add', seasonal='add', seasonal_periods=365) fit = model.fit() # Forecast and detect anomalies forecast = fit.fittedvalues residuals = data - forecast threshold = 3 * residuals.std() anomalies = residuals[abs(residuals) > threshold] print("Anomalies detected:") print(anomalies)


ដោយប្រើវិធីសាស្រ្តនេះ អ្នកអាចរកឃើញគម្លាតសំខាន់ៗដែលអាចបង្ហាញពីបញ្ហាគុណភាពទិន្នន័យ ដោយផ្តល់នូវវិធីសាស្រ្តដែលមានលក្ខណៈច្បាស់លាស់ជាងមុនចំពោះការត្រួតពិនិត្យ QA ។


ខ្ញុំសង្ឃឹមថាអត្ថបទនេះនឹងជួយអ្នកឱ្យអនុវត្តការត្រួតពិនិត្យ QA ប្រកបដោយប្រសិទ្ធភាពសម្រាប់សំណុំទិន្នន័យធំរបស់អ្នក។ ដោយប្រើបណ្ណាល័យ Deequ និងការរួមបញ្ចូលវិធីសាស្រ្តស្ថិតិ និងក្បួនដោះស្រាយស៊េរីពេលវេលា អ្នកអាចធានាបាននូវភាពត្រឹមត្រូវនៃទិន្នន័យ និងភាពអាចជឿជាក់បាន ទីបំផុតបង្កើនការអនុវត្តការគ្រប់គ្រងទិន្នន័យរបស់អ្នក។


ការអនុវត្តបច្ចេកទេសដែលបានពិពណ៌នាខាងលើនឹងជួយអ្នកការពារបញ្ហាដែលអាចកើតមាននៅក្នុងកម្មវិធីខាងក្រោម និងកែលម្អគុណភាពទាំងមូលនៃលំហូរការងារទិន្នន័យរបស់អ្នក។

L O A D I N G
. . . comments & more!

About Author

Akshay Jain HackerNoon profile picture
Akshay Jain@akshayjain1986
Data Engineering Manager at Innovate UK

ព្យួរស្លាក

អត្ថបទនេះត្រូវបានបង្ហាញនៅក្នុង...

Permanent on Arweave
Read on Terminal Reader
Read this story in a terminal
 Terminal
Read this story w/o Javascript
Read this story w/o Javascript
 Lite

Mentioned in this story

companies