يمكن Unix shell script أن تستخدم في التعامل مع قواعد البيانات ؟

StackOverflow https://stackoverflow.com/questions/71775

  •  09-06-2019
  •  | 
  •  

سؤال

يجب أن تقرأ البيانات من بعض الملفات وادخال البيانات في الجداول في قاعدة البيانات.هو Unix shell script قوية بما فيه الكفاية للقيام بهذه المهمة ؟

هل من السهل القيام بهذه المهمة في قذيفة النصي أو ينبغي أن تذهب عن القيام بذلك في جافا ؟

هل كانت مفيدة؟

المحلول

إذا كانت البيانات التي تحاول استيراد في شكل معقول -- بفواصل ، على سبيل المثال-و خادم قاعدة البيانات الخاصة بك معقولة المرافق سطر الأوامر ، وهذا ينبغي أن يكون أي مشكلة.الخلية لديه "mysqlimport" أداة سطر الأوامر التي سوف تقبل مختلف الحجج التي تصف تنسيق الملف:

mysqlimport \
    --fields-terminated-by=, \
    --ignore-lines=1 \
    --fields-optionally-enclosed-by='"' < datafile.txt

تمرير البيانات من خلال perl/sed/awk واحد المتشددين يمكن أن تساعد في الحصول عليه في شكل سليم ، و قذيفة النصي يمكن بسهولة التعامل مع المطالبة أسماء التعامل مع الحجج ، إلخ.

باستخدام مختلف أدوات سطر الأوامر التي تقدمها Unix هو نقطة كاملة باش البرمجة.Perl, الخلية, الخ.كلها جزء من تلك الأدوات.

نصائح أخرى

فمن الممكن :باستخدام unix shell script, إنشاء برنامج نصي sql واستخدام cli إلى بيانات تنفيذ البرنامج النصي sql.

إن كمية المعلومات التي هي صغيرة بما يكفي يمكن بناء SQL في الذاكرة ، أنصح ضدها على الرغم منذ كنت لا تعرف أبدا ما يخبئه المستقبل (و يمكن أن يكون كمية كبيرة جدا من البيانات).باستخدام اتصال واحد في كل طلب لا تسمح لك للاستفادة من العمليات الكبيرة التي تكون في بعض الأحيان المتاحة.

بالطبع يمكنك ، على افتراض أن كنت قد حصلت على سطر الأوامر SQL العميل مفيد!لقد فعلت ذلك w/ Sybase و isql سطر أوامر العميل.يمكنك حتى الحصول على ذكية ترسل الاشياء من خلال awk وإرسال النصوص لتوليد الأوامر على الطاير.قد لا تكون الطريقة الأكثر فعالية للقيام بكل شيء, ولكن هناك الكثير من الفرص فليكس Unix القراصنة موجو.

يمكنك, ولكن قد يكون قليلا القبيح ، على سبيل المثال إذا كنت تستخدم mysql و لنفترض أن لديك سلسلة SQL المخزنة في $sql

echo $sql | mysql -u[user] -p[password] -h[host]

p.s.قد تكون فكرة جيدة أن تقول لنا ما قاعدة بيانات كنت تستخدم حتى نتمكن من تقديم المزيد من المساعدة الخاصة :p

تحرير:غيرت سبيل المثال خط لذا فإنه في الواقع يعمل

الأنابيب هو صديقك.

على سبيل المثال ، في الخلية:

echo 'load data infile /path/to/the/file into table table_name ...' | 
    mysql -u mysql_user_id -p 

ينبغي القيام بهذا العمل.

قدمت الملف الخاص بك على نحو ما هو منظم مثلافاصلة/علامة التبويب فصل الخ.

للحصول على تفاصيل ، راجع دليل قاعدة البيانات الخاصة بك.

ذلك يعتمد على نظام إدارة قاعدة البيانات.معظمهم من قذيفة قوية أدوات استيراد البيانات ، والقيام حتى بعض ETL وظائف.هذه الأدوات يمكن أن تكون جدا حتى performant إذا كانت تدعم السائبة تحميل - عادة ما يكون جافا JDBC لا تستطيع أن تفعل ذلك بسهولة.

لا يمكن اختبار ذلك الآن, ولكن شيئا من هذا القبيل:

echo "INSERT INTO foo (b,a,r) VALUES (1,2,3);" | 
    mysql -u user -psecret -h host database

في قذيفة النصي يجب أن تعمل.لا أعرف عن الحصول على البيانات من ذلك على الرغم من

Shell scripting (باش أو ما شابه) الغاية الأساسية هو عدم التعامل مع قواعد البيانات.تذهب جافا أو حتى أفضل, ركوب هذه الفرصة لتعلم أساسيات لغة البرمجة مثل بايثون او روبي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top